SQL是/否CASE具有不同的结果

时间:2018-04-24 03:54:57

标签: sql case

我想从库存数据库中获取是/否。每个用户在库存中都有多个项目。我正在寻找一个特定的项目,并希望一个简单的是/否列。任何帮助是极大的赞赏。这是我到目前为止所做的。

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,我只想要一个是/否回答。我当前的查询给出了一个列表,但它显示了每个用户的多个条目。我只想要一个。谢谢你的帮助!

3 个答案:

答案 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)上的索引,这应该是对此信息的最快查询(它避免了聚合)。