繁体   English   中英

从单列显示多列 select 语句

[英]Displaying multiple columns from a single column select statement

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

例如,我的表有一个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 是扬声器类型)但是每当我尝试创建自己的列时,我最终都会得到相同的数据在两个列返回。

例如,我会使用类似的东西

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

这将创建正确的 header,但我将在每个值调用的每一列中获得相同的数据(例如,第一行将在加入日期、车辆类型和扬声器类型下有 2011-03-24,第 2 行将是 2011-03 -25 而不是第 3 行将是山猫)

感谢您提供的任何帮助!

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

在不使用动态 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....
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

大概是这样的?

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

暂无
暂无

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

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