[英]SQL yes/no CASE with distinct results
我正在尝试从库存数据库获得是/否。 每个用户的库存中都有一个以上的物品。 我正在寻找一个特定的项目,并希望有一个简单的是/否栏。 任何帮助是极大的赞赏。 到目前为止,这就是我所拥有的。
SELECT USER,
CASE HARDWARE_REF
WHEN 'DELL' THEN 'YES'
ELSE 'NO'
END AS DELL
FROM USER_DB
LEFT OUTER JOIN ASSETS_DB ON USER_DB.USER = ASSETS_DB.OWNER
RESULT
用户戴尔
AB1234 NO
CD3456 YES
EF4567 NO
enter code here
如果他们有DELL,我只想要一个是/否响应。 我当前的查询提供了一个列表,但每个用户显示了多个条目。 我只想要一个。 感谢您的任何帮助!
如果我理解正确,您似乎想要
SELECT u.USER,
SUM(CASE HARDWARE_REF WHEN 'DELL' THEN 1 ELSE 0 END) Hardware
FROM USER_DB u -- use alise u
LEFT OUTER JOIN ASSETS_DB ast ON u.UID = ast .OWNER
GROUP BY u.USER;
您可以进一步将其表达为:
CASE WHEN (<SUM AGGREGATION>) >= 1 THEN 'true' else 'false' END
忠告:始终使用易于阅读或书写的alise。
您需要命名或给case块起别名。 尝试这个:
SELECT DISTINCT
USER,
CASE
HARDWARE_REF WHEN 'DELL' THEN 'YES'
ELSE 'NO'
END AS IS_DELL
FROM USER_D
LEFT OUTER JOIN ASSETS_DB
ON USER_DB.UID = ASSETS_DB.OWNER
但是,如果您只想了解使用Dell硬件的用户,则应该改用它。
SELECT DISTINCT
USER
FROM USER_DB
INNER JOIN ASSETS_DB
ON USER_DB.UID = ASSETS_DB.OWNER
WHERE HARDWARE_REF='DELL';
您可以为此使用exists
:
SELECT u.*,
(CASE WHEN EXISTS (SELECT 1
FROM ASSETS_DB a
WHERE u.UID = a.OWNER AND a.HARDWARE_REF = 'DELL'
)
THEN 'YES' ELSE 'NO'
END) as has_dell
FROM USER_DB u;
使用ASSETS_DB(OWNER, HARDWARE_REF)
上的索引ASSETS_DB(OWNER, HARDWARE_REF)
这应该是对此信息的最快查询(它避免了聚合)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.