您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

透视表,不带文本,不进行汇总

透视表,不带文本,不进行汇总

仅仅因为您的表中有文本数据并不意味着您不能在其上使用聚合函数

您没有指定您所使用的RDBMS,但这种类型的数据转化为一个 支点 。这会将行数据转换为列。某些数据库具有枢轴功能,但是如果您使用的是不带枢轴功能数据库,那么您将需要使用带有CASE表达式的聚合函数

select lineid,
  max(case when question ='Height' then answer else '' end) Height,
  max(case when question ='Outside Color' then answer else '' end) [Outside Color]
from yourtable 
group by lineid

参见带有演示的SQL Fiddle

如果您有一个具有数据透视功能数据库sql Server 2005 + / Oracle 11g +),那么您的代码将类似于以下内容

select *
from 
(
  select lineid,
    Question,
    Answer
  from yourtable
) src
pivot
(
  max(answer)
  for question in ([Height], [Outside Color])
) piv;

参见带有演示的SQL Fiddle

现在,如果您使用的是sql Server 2005+,并且有许多未知的问题要转换为列,那么可以使用类似于以下内容的动态sql

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Question) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT lineid,' + @cols + ' from 
             (
                select lineid,
                  Question,
                  Answer
                from yourtable
            ) x
            pivot 
            (
                max(Answer)
                for Question in (' + @cols + ')
            ) p '

execute(@query)

参见带有演示的SQL Fiddle

根据您的样本数据,结果为:

| LINEID |  HEIGHT | OUTSIDE COLOR |
------------------------------------
|      1 | 180 3/4 |    Dark Green |
其他 2022/1/1 18:33:36 有610人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶