【发布时间】:2022-01-07 15:45:21
【问题描述】:
我正在使用 Microsoft SQL (SSMS):
| UPC | Item | Department |
|---|---|---|
| 1 | a | 0 |
| 2 | b | 23 |
| 3 | c | 33 |
| 4 | a | 0 |
我正在尝试编写一个查询,如果 [Department] = 0,则将 [UPC] 分配为“部门”
在此示例中,[Item]=a 将有两个 [UPC] 值和不同的 [Department] 值。 我正在尝试根据 [Item] 分配 min([UPC] 所以我可以看到以下输出:
| UPC | Item | Department |
|---|---|---|
| 1 | a | 1 |
| 4 | a | 1 |
这是我目前所拥有的,我知道这是错误的。谁能帮我解决这个问题? 谢谢!
SELECT h.[UPC], h.[Item]
CASE WHEN h.[Department] = 0 THEN
CASE WHEN count(h.[UPC]) = 1 THEN h.[UPC]
ELSE f.[Min_UPC] END
ELSE h.[Department] END AS 'Department'
FROM [table]h
LEFT JOIN
(SELECT [Item], MIN([UPC]) AS 'Min_UPC' FROM [table]
GROUP BY [Item])f on h.[Item] = f.[Item]
GROUP BY h.[UPC], h.[Item], f.[Min_UPC], h.[Department]
【问题讨论】:
-
所以你需要按商品最小化UPC吗?我也没有得到“如果 [Department] = 0,将 [UPC] 分配为'Department'”语句,因为这不是示例结果集中显示的内容,其中
Department是1,而不是1&4. -
您好,感谢您的回复。第二张表是我希望实现的,是的,是按项目计算的 MIN UPC。所以在第一个表中,由于项目 A 的部门为 0,我想为两行分配 1 作为部门。这有意义吗?
-
旁注:不要习惯使用单引号作为标识符,例如列别名。是的,遗憾的是 SQL Server 接受了这一点,但在 SQL 中,单引号通常用于字符串(或日期......)文字。如果您曾经使用过另一个 DBMS(或者未来的 SQL Server 版本会对此更加清醒),您可能会遇到错误。对包含特殊字符或区分大小写的标识符使用方括号,或者最好根本不使用特殊字符和区分大小写的标识符。标识符不需要是“漂亮”、“漂亮”的标头等,这是表示层的工作。
-
这是一个很好的提示,谢谢! :)
标签: sql sql-server tsql