带有子查询的SQL Pivot

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有子查询的SQL Pivot相关的知识,希望对你有一定的参考价值。

我有一张看起来像这样的桌子

value | effective_date
----------------------
  'A' | '2000-10-31' 
  'A' | '2000-11-30'
  'B' | '2000-10-31'
  'B' | '2000-11-30'
  'C' | '2001-10-31'
  'C' | '2001-12-31'

如何旋转effective_date列以显示每个日期是否存在值?

输出:

value | 2000-10-31 | 2000-11-30 | 2001-10-31 | 2001-12-31
  'A' |      1     |      1     |      0     |     0
  'B' |      1     |      1     |      0     |     0
  'C' |      0     |      0     |      1     |     1

我选择第一个表

SELECT DISTINCT value, effective_date
FROM table
WHERE condition

effective_date

SELECT DISTINCT effective_date
FROM table
ORDER BY effective_date
答案
CREATE TABLE #Test ([value] char(1), effective_date date)

INSERT INTO #Test ([value], effective_date) VALUES
('A', '2000-10-31'), 
('A', '2000-11-30'),
('B', '2000-10-31'),
('B', '2000-11-30'),
('C', '2001-10-31'),
('C', '2001-12-31')

SELECT *
FROM
(
    SELECT [value] AS 'Display', [value], effective_date FROM #Test
) AS SRC
PIVOT
    (
        COUNT([value])
        FOR effective_date
        IN ([2000-10-31], [2000-11-30], [2001-10-31], [2001-12-31])
    ) AS PVT

DROP TABLE #Test

以上是关于带有子查询的SQL Pivot的主要内容,如果未能解决你的问题,请参考以下文章

使用子查询 oracle sql 进行数据透视

SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句

带有Sum的Oracle SQL交叉表

SQL 连接,使用 Pivot 聚合

带有多个子查询的 SQL 错误 10249 Hive

来自 SQL 查询的 Linq Pivot