如果存在两个值,请选择一个值

时间:2015-09-17 10:55:13

标签: sql sql-server tsql

我有一张桌子,让我们说3列:商店,产品,状态 在某些情况下,表会为一个商店和产品返回2行,但状态不同:

Store  Product  Status
120    255      SYSTEM
120    255      USER

我想要做的是如果两者都存在,则获取USER行(USER和SYSTEM),但如果只有一个Status,我想获得一个当前状态。 有什么想法吗?

3 个答案:

答案 0 :(得分:1)

一种方法是使用分组和max聚合函数:

select store, product, max(status) as status
from t 
group by store, product;

如果只有一行,这将获得唯一的当前行,或者如果组中存在USER和SYSTEM,您将获得USER行(因为USER在SYSTEM之后排序)。

答案 1 :(得分:0)

SELECT Store, Product, Status 
FROM TABLE T1
WHERE 1 = (SELECT COUNT(*) FROM TABLE T2
WHERE T1.STORE = T2.STORE AND T1.PRODUCT= T2.PRODUCT)

UNION

SELECT Store, Product, Status 
FROM TABLE T1
WHERE 1 < (SELECT COUNT(*) FROM TABLE T2
WHERE T1.STORE = T2.STORE AND T1.PRODUCT= T2.PRODUCT)
AND STATUS = 'USER'

答案 2 :(得分:0)

这将有效

SELECT TOP 1
    Store ,
    Product,  
    Status,
FROM
  YourTable
ORDER BY CASE WHEN Status = 'USER' THEN 0 ELSE 1 END