我有一张桌子,让我们说3列:商店,产品,状态 在某些情况下,表会为一个商店和产品返回2行,但状态不同:
Store Product Status
120 255 SYSTEM
120 255 USER
我想要做的是如果两者都存在,则获取USER行(USER和SYSTEM),但如果只有一个Status,我想获得一个当前状态。 有什么想法吗?
答案 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