如何在ssms中将值合并为类别?
SELECT
,[CustomerName]
,[ItemRelation]
,[SaleCount]
,[DocumentNum]
,[DocumentYear]
,[IsPromo]
FROM mytable
字段
,[CustomerName
,[ItemRelation]
,[DocumentNum]
,[DocumentYear]
是分层类别
例如,"the shop of horns and hoofs" - "111" - "37" - "2018year"
。
[SaleCount]
销售数量。
有什么困难。
对于每个这样的阶层,有股票的数据[IsPromo](0-没有股票,1是股票)
数据样本被截断,只是一个例子
[ItemRelation] [SaleCount] IsPromo ,[DocumentNum] [DocumentYear]
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 8,85947691 0 138 2018
11203 9,450108704 0 138 2018
11203 12,40326767 1 138 2018
我们看到地层
[ItemRelation], [DocumentNum] [DocumentYear]
11202 137 2018
3个,两个零由ispromo
和 通过阶层
[ItemRelation], [DocumentNum] [DocumentYear]
11203 138 2018
这里 2个,一个零
如何编写一个只返回“stratum”的查询,其中ispromo的ones
发生的次数是2到4次?
答案 0 :(得分:2)
你可以尝试一下这些内容:
select [ItemRelation] , [SaleCount],[DocumentNum] [DocumentYear]
from mytable
group by IsPromo
having IsPromo = 1 and count(IsPromo)>=2 and count(IsPromo)>=4
答案 1 :(得分:1)
我们可以通过在每个层上对IsPromo
求和,然后仅保留总和在2和4之间的记录来返回每个层次的所有匹配记录。
SELECT [ItemRelation], [DocumentNum], [DocumentYear] -- and maybe other columns
FROM
(
SELECT *,
SUM(CAST(IsPromo AS INT)) OVER (PARTITION BY ItemRelation, DocumentNum,
DocumentYear) promo_sum
FROM mytable
) t
WHERE t.promo_sum BETWEEN 2 AND 4;
注意:如果您真的只希望看到每个匹配的层次,那么我们可以使用GROUP BY
查询。但是,您仍然可以轻松地将上述查询修改为SELECT DISTINCT
以获得此结果。