首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用枢轴来获得这个?

如何使用枢轴来获得这个?
EN

Stack Overflow用户
提问于 2018-01-12 05:26:24
回答 1查看 42关注 0票数 0

我有张像这样的桌子

代码语言:javascript
复制
DATE        AREA 
01-01-2018   AREA-1
02-01-2018   AREA-1
03-01-2018   AREA-2

我想要的结果应该是这样的:

代码语言:javascript
复制
AREA    01-01-2018   02-01-2018   03-01-2018
AREA-1    YES           YES          NO
AREA-2    NO            NO          YES

我怎么能拿到这个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 05:33:56

这里有一种使用Pivot的方法

代码语言:javascript
复制
SELECT AREA,
       COALESCE([01-01-2018], 'NO'),
       COALESCE([02-01-2018], 'NO'),
       COALESCE([03-01-2018], 'NO')
FROM   (SELECT *,
               'YES' AS t
        FROM   Yourtable)a
       PIVOT(Max(t)
            FOR DATE IN ([01-01-2018],[02-01-2018],[03-01-2018]) ) pv 

更简单的方法

代码语言:javascript
复制
SELECT AREA,
       Max(CASE WHEN date = '01-01-2018' THEN 'YES' ELSE 'NO' END),
       Max(CASE WHEN date = '02-01-2018' THEN 'YES' ELSE 'NO' END),
       Max(CASE WHEN date = '03-01-2018' THEN 'YES' ELSE 'NO' END)
FROM   Yourtable
GROUP  BY AREA 

动态版本

代码语言:javascript
复制
DECLARE @col_list    VARCHAR(max)='',
        @select_list VARCHAR(max)='',
        @sql         VARCHAR(max)

SET @col_list = Stuff((SELECT DISTINCT ',' + Quotename(DATE)
                       FROM   Yourtable
                       FOR xml path('')), 1, 1, '')
SET @select_list = Stuff((SELECT DISTINCT ',COALESCE(' + Quotename(DATE) + ',''NO'') as ' + Quotename(DATE)
                          FROM   Yourtable
                          FOR xml path('')), 1, 1, '')
SET @sql = '
    SELECT AREA,' + @select_list + '
    FROM   (SELECT *,
                   ''YES'' AS t
            FROM   Yourtable)a
           PIVOT(Max(t)
                FOR DATE IN (' + @col_list + ') ) pv'

EXEC (@sql) 

注意:始终以Date类型而不是varchar类型存储日期。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48220061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档