简体   繁体   English

将多个列取消透视成行

[英]Unpivot Multiple Columns in into Rows

I did some searching and didn't come up with a good answer. 我做了一些搜索,但没有给出一个好的答案。 I am trying to create a table from data and then Unpivot it in SQL Server, but can't get the columns and rows required. 我正在尝试从数据创建一个表,然后在SQL Server中取消对其进行透视,但是无法获取所需的列和行。

IF OBJECT_ID('tempdb..##EXPECT_PERCENTS') IS NOT NULL
   DROP TABLE ##EXPECT_PERCENTS

CREATE TABLE ##EXPECT_PERCENTS (
   PAYOR_ID VARCHAR(40)
   ,TEST_TYPE VARCHAR(40)
   ,[2011-08-31] INT
   ,[2011-09-30] INT
)
GO

INSERT INTO ##EXPECT_PERCENTS VALUES('UHC','UDT','1','2');

select * from ##EXPECT_PERCENTS

SELECT PAYOR_ID, TEST_TYPE, EXPECT
FROM ##EXPECT_PERCENTS
UNPIVOT 
(
  EXPECT FOR EXPECTS IN ([2011-08-31],[2011-09-30])
) AS u

I am trying to unpivot the dates as well so that there is another field called "Date" with the two dates representing each number. 我也尝试取消日期的更改,以便有一个名为“日期”的字段,其中两个日期代表每个数字。 The first line should be: 第一行应为:

UHC UDT 1 2011-08-31

Needing to unpivot multiple columns can often be easier without the unpivot command. 如果不使用unpivot命令,则需要取消透视多个列通常会更容易。 One option is to use CROSS APPLY : 一种选择是使用CROSS APPLY

select payor_id, test_type, expect, expectdate
from expect_percents
cross apply
(
  select [2011-08-31],'2011-08-31' union all
  select [2011-09-30],'2011-09-30'
) c (expect, expectdate);

Another option is to use UNION ALL : 另一种选择是使用UNION ALL

select payor_id, test_type, [2011-08-31] expect, '2011-08-31' date
from expect_percents
union all
select payor_id, test_type, [2011-09-30] expect, '2011-09-30' date
from expect_percents;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM