我目前正在尝试将一系列行转换为一行,以便数据可以显示在报告上。
我的数据显示在我的表CustomData
中,如下所示:
CustomDataID(PK) CustomDataDefinition ReferenceTablePKValue IntValue DateTimeValue StringValue
1 Number 1638 1230 NULL NULL
2 1stDate 1638 NULL 2014-09-23 NULL
3 2ndDate 1638 NULL 2014-09-25 NULL
4 3rdDate 1638 NULL 2014-09-25 NULL
5 Notes 1638 NULL NULL Test note.
我的目标是拥有这样的东西。基本上我需要它把它作为一行。
Number 1stDate 2ndDate 3rdDate Notes
1230 2014-09-23 2014-09-25 2014-09-25 Test note.
我尝试过使用多个SELECT
的各种JOINs
语句,但这些语句根本没有效果。我认为可能有一个临时表可以工作,但我真的不太熟悉它是如何工作的。有没有人对如何适当地转换这些数据有任何想法?如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
由于有不同的类型,您无法在此处使用数据透视,因此您可以使用数据透视功能之前的功能:
with t(CustomDataID, CustomDataDefinition, ReferenceTablePKValue
, IntValue, DateTimeValue, StringValue) as (
select 1, 'Number', 1638, 1230, NULL, NULL union all
select 2, '1stDate', 1638, NULL, '2014-09-23', NULL union all
select 3, '2ndDate', 1638, NULL, '2014-09-25', NULL union all
select 4, '3rdDate', 1638, NULL, '2014-09-25', NULL union all
select 5, 'Notes', 1638, NULL, NULL, 'Test note'
)
select ReferenceTablePKValue
, max(case
when CustomDataDefinition = 'Number' then intvalue
end) "number"
, max(case
when CustomDataDefinition = '1stDate' then datetimevalue
end) "1stDate"
, max(case
when CustomDataDefinition = '2ndDate' then datetimevalue
end) "2ndDate"
, max(case
when CustomDataDefinition = '3rdDate' then datetimevalue
end) "3rdDate"
, max(case
when CustomDataDefinition = 'Notes' then stringvalue
end) "Notes"
from t
group by ReferenceTablePKValue
REFERENCETABLEPKVALUE NUMBER 1STDATE 2NDDATE 3RDDATE NOTES
-----------------------------------------------------------------------------
1638 1230 2014-09-23 2014-09-25 2014-09-25 Test note
答案 1 :(得分:0)
取决于你想要做多少行,简单的方法来准确地返回你正在寻找的是使用case语句,如果你试图为一堆不同的变量做这个,然后做一个cse的bunnch声明并不好玩,此时我会考虑转动数据。
select
case when CustomDataDefinition = 'Number' then intvalue end 'Number',
case when CustomDataDefinition = '1stDate' then datetimevalue end '1stDate',
case when CustomDataDefinition = '2ndDate' then datetimevalue end '2ndDate',
case when CustomDataDefinition = '3rdDate' then datetimevalue end '3rdDate',
case when CustomDataDefinition = 'Notes' then stringvalue end 'Notes'
from
*yourtable*