我在一个数据库表(列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
答案 0 :(得分:0)
您似乎希望标记指示c
以及c
和d
的第一个组。假设您有一些指定排序的列,您可以使用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
列和/或创建日期以及此类信息。