繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM