显示单列select语句中的多个列

时间:2011-07-11 13:50:14

标签: sql

我正在尝试从表格中提取数据,并根据单个列的结果显示多个列。

例如,我的表有一个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行将是山猫)

感谢您提供的任何帮助!

编辑:感谢所有提供帮助的人!如果可以,我会投票,但每当我尝试它时告诉我必须登录或注册(因为我登录以编辑和批准答案,这很奇怪)。

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