SQL查询数据与计数分组

时间:2015-02-10 23:03:07

标签: sql sql-server

我在一个数据库表(列A到E)中有以下数据。我需要一个查询来显示相同​​的列(A到E),添加两个额外的列。

在Excel中,我使用以下公式来执行此操作,但我无法使用查询(SQL Server):

=SI(CONTAR.SI(C$2:C2;C2)=1;1;0)
=(CONTAR.SI.CONJUNTO(C$2:C2;C2;$D$2:D2;D2)=1)*1

A ----- B ----- C ----- D ----- E ----- COUNT (DISTINCT C) ----- COUNT (DISTINCT C&D)
1 ----- 26 -- 4650 ---- 1 ---- 11 ----- 1 ---------------------------------- 1
1 ----- 26 -- 4650 ---- 1 ---- 22 ----- 0 ---------------------------------- 0
1 ----- 26 -- 4650 ---- 9 ---- 11 ----- 0 ---------------------------------- 1
1 ----- 26 -- 4650 ---- 9 ---- 22 ----- 0 ---------------------------------- 0
1 ----- 26 -- 50934 --- 1 ---- 11 ----- 1 ---------------------------------- 1
1 ----- 26 -- 50934 --- 1 ---- 22 ----- 0 ---------------------------------- 0
1 ----- 26 -- 50934 --- 1 ---- 40 ----- 0 ---------------------------------- 0
1 ----- 26 -- 51097 --- 3 ---- 40 ----- 1 ---------------------------------- 1
1 ----- 26 -- 51097 --- 3 ---- 41 ----- 0 ---------------------------------- 0
1 ----- 26 -- 51097 --- 4 ---- 40 ----- 0 ---------------------------------- 1
1 ----- 26 -- 51097 --- 4 ---- 41 ----- 0 ---------------------------------- 0
3 ----- 34 -- 50099 --- 1 ---- 40 ----- 1 ---------------------------------- 1
3 ----- 34 -- 50099 --- 1 ---- 41 ----- 0 ---------------------------------- 0
3 ----- 34 -- 50099 --- 1 ---- 42 ----- 0 ---------------------------------- 0

1 个答案:

答案 0 :(得分:0)

您似乎希望标记指示c以及cd的第一个组。假设您有一些指定排序的列,您可以使用row_number()

执行此操作
select t.*,
       (case when row_number() over (partition by c order by id) = 1
             then 1 else 0 end),
       (case when row_number() over (partition by c, d order by id) = 1
             then 1 else 0 end)
from table t;

SQL表表示无序集,因此组中没有第一行,除非另一列指定了排序。通常,表格包含identity列和/或创建日期以及此类信息。