SQL:如何将值合并为ssms中的类别

时间:2018-06-12 11:48:42

标签: sql sql-server sql-server-2012 ssms

如何在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次?

2 个答案:

答案 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以获得此结果。