我创建了查询
SELECT Dt, CustomerName, ItemRelation, SaleCount,
DocumentNum, DocumentYear, IsPromo, CustomerType
FROM [dbo].[promo_data] where [CustomerType]='XY'
库存数据[IsPromo](0-无库存,1是库存) 如何仅选择CustomerType的这些obs XY 对于动作类别只有一个值1 = 1
简单的例子
[ItemRelation] [SaleCount] IsPromo ,[DocumentNum] [DocumentYear]
11203 8,85947691 0 138 2018
11203 9,450108704 0 138 2018
11203 12,40326767 1 138 2018
11202 8,85947691 0 137 2018
11202 9,450108704 0 137 2018
11202 12,40326767 1 137 2018
11202 25,98779894 1 137 2018
11202 63,19760196 1 137 2018
我必须选择
11203 1 138 2018
,因为
11202 137 2018
有两个
答案 0 :(得分:2)
你似乎想要:
SELECT ItemRelation, DocumentNum, DocumentYear, IsPromo
FROM [dbo].[promo_data]
WHERE CustomerType = 'XY' AND IsPromo = 1
GROUP BY ItemRelation, DocumentNum, DocumentYear, IsPromo
HAVING COUNT(*) = 1;
编辑:
要检索所有列,请使用窗口函数:
SELECT *
FROM (SELECT pd.*,
COUNT(*) OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear, IsPromo) as cnt
FROM [dbo].[promo_data] pd
WHERE CustomerType = 'XY' AND IsPromo = 1
) pd
WHERE cnt = 1;
答案 1 :(得分:1)
根据Gordon的回答,如果要选择分组中未使用的其他字段,可以使用子查询进行自联接,如下所示:
SELECT pd.Dt, pd.CustomerName, pd.ItemRelation, pd.SaleCount,
pd.DocumentNum, pd.DocumentYear, pd.IsPromo, pd.CustomerType
FROM [dbo].[promo_data] pd
INNER JOIN(
SELECT ItemRelation, DocumentNum, DocumentYear, IsPromo
FROM [dbo].[promo_data]
WHERE CustomerType = 'XY' AND IsPromo = 1
GROUP BY ItemRelation, DocumentNum, DocumentYear, IsPromo
HAVING COUNT(*) = 1
) grouped
ON pd.ItemRelation = grouped.ItemRelation
AND pd.DocumentNum = grouped.DocumentNum
AND pd.DocumentYear = grouped.DocumentYear
AND pd.IsPromo = grouped.IsPromo