我想从库存数据库中获取是/否。每个用户在库存中都有多个项目。我正在寻找一个特定的项目,并希望一个简单的是/否列。任何帮助是极大的赞赏。这是我到目前为止所做的。
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
USER DELL
AB1234 NO
CD3456 YES
EF4567 NO
enter code here
如果他们有DELL,我只想要一个是/否回答。我当前的查询给出了一个列表,但它显示了每个用户的多个条目。我只想要一个。谢谢你的帮助!
答案 0 :(得分:0)
如果我理解正确,您似乎想要
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。
答案 1 :(得分:0)
您需要为案例块命名或给别名。试试这个:
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
但如果您只想知道使用戴尔硬件的用户,那么您应该使用它。
SELECT DISTINCT
USER
FROM USER_DB
INNER JOIN ASSETS_DB
ON USER_DB.UID = ASSETS_DB.OWNER
WHERE HARDWARE_REF='DELL';
答案 2 :(得分:0)
您可以使用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)
上的索引,这应该是对此信息的最快查询(它避免了聚合)。