我正在尝试从表格中提取数据,并根据单个列的结果显示多个列。
例如,我的表有一个recordId,一个valueId和一个值。它看起来像这样
recordId | valueId | value
1 | 5 | 2011-03-24
2 | 5 | 2011-03-25
3 | 3 | Bobcat
4 | 3 | Backloader
5 | 4 | Mono
6 | 4 | Stereo
我正在尝试基于valueId创建多个列(例如,valueId 5是加入日期,valueId 3是车辆类型,而valueId 4是扬声器类型)但每当我尝试创建自己的列时,我最终得到两个列中的相同数据都返回。
e.g。 我会使用像
这样的东西 select recordId as Records, valueId as [Join Date], valueId as [Vehicle type], valueId as [Speaker Type], value as [Data Entered] where valueId = 5 OR valueId = 3 OR valueId = 4
这将创建正确的标题,但我会在每个值调用的每列中获得相同的数据(例如,第一行将在2011-03-24下的加入日期,车辆类型和扬声器类型,第2行将是2011-03-25而不是第3行将是山猫)
感谢您提供的任何帮助!
编辑:感谢所有提供帮助的人!如果可以,我会投票,但每当我尝试它时告诉我必须登录或注册(因为我登录以编辑和批准答案,这很奇怪)。
答案 0 :(得分:1)
不使用动态SQL,您可以使用以下技术对数据进行PIVOT / ROTATE。虽然它的缺点是您必须对所有值进行硬编码。
select recordId as Records,
case when valueid=5 then value else null end [Join Date],
case when valueid=3 then value else null end [Vehicle type],
case when valueId=4 then value else null end [Speaker Type]
from Table
where valueId in (5,3,4)
RecordID | Join Date | Vehicle Type | Speaker Type
1 | 2011-03-24 | null | null
2 | 2011-03-25 | null | null
3 | null | Bobcat | null
4 | null | Backloader | null
etc....
答案 1 :(得分:0)
select recordId as Records,
case
when valueId = 5 then value
else null
end as [Join Date],
case
when valueId = 3 then value
else null
end as [Vehicle type],
case
when valueId = 4 then value
else null
end as [Speaker Type]
from yourTable
答案 2 :(得分:0)
或许这样的事情?
select recordId as Records,
case valueId when 5 then value end as [Join Date],
case valueId when 3 then value end as [Vehicle type],
case valueId when 4 then value end as [Speaker Type],
value as [Data Entered]
from YourTable
where valueId = 5 OR valueId = 3 OR valueId = 4
结果:
Records Join Date Vehicle type Speaker Type Data Entered
----------- ---------- ------------ ------------ ------------
1 2011-03-24 NULL NULL 2011-03-24
2 2011-03-25 NULL NULL 2011-03-25
3 NULL Bobcat NULL Bobcat
4 NULL Backloader NULL Backloader
5 NULL NULL Mono Mono
6 NULL NULL Stereo Stereo