2014-09-02 68 views
-2
DECLARE @temp TABLE 
(SEQ_NBR INT, TERR_CD NVARCHAR(20), DSTR_CD NVARCHAR(20), RGN_CD NVARCHAR(20), AREA_CD NVARCHAR(20), CNTR_CD NVARCHAR(20)) 

INSERT INTO @temp VALUES (1, 'TERR A', 'DSTR A', 'RGN A', 'AREA A', 'BUS CNTR A') 
INSERT INTO @temp VALUES (1, 'TERR B', 'DSTR A', 'RGN A', 'AREA A', 'BUS CNTR A') 
INSERT INTO @temp VALUES (1, 'TERR C', 'DSTR B', 'RGN A', 'AREA A', 'BUS CNTR A') 
INSERT INTO @temp VALUES (1, 'TERR A2', 'DSTR A2', 'RGN A2', 'AREA A2', 'BUS CNTR A2') 
INSERT INTO @temp VALUES (1, 'TERR B2', 'DSTR B2', 'RGN A2', 'AREA A2', 'BUS CNTR A2') 
INSERT INTO @temp VALUES (2, 'TERR C', 'DSTR B', 'RGN A', 'AREA A', 'BUS CNTR A') 
INSERT INTO @temp VALUES (2, 'TERR D', 'DSTR C', 'RGN B', 'AREA A', 'BUS CNTR A') 
INSERT INTO @temp VALUES (2, 'TERR B2', 'DSTR B2', 'RGN A2', 'AREA A2', 'BUS CNTR A2') 

SELECT * FROM @temp 

现在,我需要这样的输出:查询具有多计数

SEQ_NBR TERR_NM TERR_CNT DSTR_NM DSTR_CNT RGN_CD RGN_CNT AREA_CD AREA_CNT CTR_CD CTR_CNT 
1 TERR A 1  DSTR A 2  RGN A 3 AREA A 3  BUS CNTR A 3 
1 TERR B 1  DSTR A 2  RGN A 3 AREA A 3  BUS CNTR A 3 
1 TERR C 1  DSTR B 1  RGN A 3 AREA A 3  BUS CNTR A 3 
1 TERR A2 1  DSTR A2 1  RGN A2 2 AREA A2 2  BUS CNTR A2 2 
1 TERR B2 1  DSTR B2 1  RGN A2 2 AREA A2 2  BUS CNTR A2 2 
2 TERR C 1  DSTR B 1  RGN A 1 AREA A 2  BUS CNTR A 2 
2 TERR D 1  DSTR C 1  RNG B 1 AREA A 2  BUS CNTR A 2 
2 TERR B2 1  DSTR B2 1  RGN A2 1 AREA A2 1  BUS CNTR A2 1 

这里,SEQ_NBR 1被关联到5 differenr TERR_CD,因此TERR_CNT是1 TERR_CD “A” 和“B “属于DSTR_CD A,而TERR_CD”C“属于DSTR_CD B,所以DSTR A的计数为2,DSTR B的计数为1,同样对于RGN_CD”A“,计数将为3.

有人可以帮忙我与查询?

+2

请学会格式化你的代码后,差不多10个职位 – 2014-09-02 10:59:06

+2

格式化你的代码,你没有格式化再次更新吗? – 2014-09-02 11:01:46

+0

对不起,让我再次发布 – 2014-09-02 11:02:38

回答

1

这是很简单的:

SELECT 
    SEQ_NBR, 
    TERR_CD, 
    COUNT(*) over (PARTITION BY TERR_CD, SEQ_NBR) TERR_CNT, 
    DSTR_CD, 
    COUNT(*) over (PARTITION BY DSTR_CD, SEQ_NBR) DSTR_CNT, 
    RGN_CD, 
    COUNT(*) over (PARTITION BY RGN_CD, SEQ_NBR) RGN_CNT, 
    AREA_CD, 
    COUNT(*) over (PARTITION BY AREA_CD, SEQ_NBR) AREA_CNT, 
    CNTR_CD, 
    COUNT(*) over (PARTITION BY CNTR_CD, SEQ_NBR) CNTR_CNT 
FROM @temp