【问题标题】:Query Having Multiple Counts查询具有多个计数
【发布时间】:2014-09-02 10:57:52
【问题描述】:
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 个不同的 TERR_CD 相关联,因此 TERR_CNT 为 1。TERR_CD "A" 和 "B" 属于 DSTR_CD A,TERR_CD "C" 属于 DSTR_CD B,因此 DSTR 的计数将为 2 DSTR B 的 A 和 1。同样,对于 RGN_CD "A",计数将为 3。

有人可以帮我查询吗?

【问题讨论】:

  • 请在将近 10 个帖子后学会格式化您的代码
  • 格式化了你的代码,你又更新了没有格式化?
  • 对不起,让我再发一次

标签: sql sql-server tsql aggregate-functions


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多