Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多列透视SQL Server_Sql_Database_Sql Server 2008_Pivot_Unpivot - Fatal编程技术网

多列透视SQL Server

多列透视SQL Server,sql,database,sql-server-2008,pivot,unpivot,Sql,Database,Sql Server 2008,Pivot,Unpivot,我遇到了一个在SQLServer2008中处理多列数据透视的问题。我想用一个例子来解释 下面是使用内部联接和左侧外部联接联接6个不同表的结果 ID Type Date Location Result Proc ProcDate ProcDetail ProcNotes -------------------------------------------------------------------------------------- 1

我遇到了一个在SQLServer2008中处理多列数据透视的问题。我想用一个例子来解释

下面是使用内部联接和左侧外部联接联接6个不同表的结果

ID  Type    Date    Location    Result  Proc    ProcDate    ProcDetail        ProcNotes
--------------------------------------------------------------------------------------
1   ABC    1/1/2010   OK          AO    Proc_A  1/1/2013   This is Detail   Proc_A Notes
1   XYG    1/2/2011                     Proc_A  1/1/2013   This is Detail   Proc_A Notes
1   ABC    1/1/2010   OK          AO    Proc_B  1/1/2011   This is Detail   Proc_B Notes
1   XYG    1/2/2011                     Proc_B  1/1/2011   This is Detail   Proc_B Notes
以下是上表的详细信息

有两种类型ABC和XYG以及相关日期

位置和结果与ABC类型关联

有两个过程A和过程B以及相关日期

ProcDetail和ProcNotes与Proc Proc_A关联

这些值都是未知的

我希望得到一个结果,而不是上面的结果集,如下所示。

ID       Type1     Date1       Type2     Date2     Location   Result    Proc1     ProcDate1    ProcNotes1        ProcDetail           Proc2       ProcDate2      ProcNotes2
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1        ABC     1/1/2010      XYZ     1/2/2011    OK         AO       Proc_A     1/1/2013    Proc_A Notes       This is Detail       Proc _B      1/1/2011         Proc_B Notes

感谢您的研究。

如果预先知道值
ABC
XYG
,您可以进行条件聚合

SELECT ID,
       MAX(CASE WHEN type = 'ABC' THEN 'ABC' END) Type1,
       MAX(CASE WHEN type = 'ABC' THEN Date END) Date1,
       MAX(CASE WHEN type = 'XYG' THEN 'XYZ' END) Type2,
       MAX(CASE WHEN type = 'XYG' THEN Date END) Date2,
       MAX(Location) Location,
       MAX(Result) Result,
       MAX(CASE WHEN type = 'ABC' THEN [Proc] END) Proc1,
       MAX(CASE WHEN type = 'ABC' THEN ProcDate END) ProcDate1,
       MAX(CASE WHEN type = 'ABC' THEN ProcDetail END) ProcDetail1,
       MAX(CASE WHEN type = 'ABC' THEN ProcNotes END) ProcNotes1,
       MAX(CASE WHEN type = 'XYG' THEN [Proc] END) Proc2,
       MAX(CASE WHEN type = 'XYG' THEN ProcDate END) ProcDate2,
       MAX(CASE WHEN type = 'XYG' THEN ProcDetail END) ProcDetail2,
       MAX(CASE WHEN type = 'XYG' THEN ProcNotes END) ProcNotes2
  FROM
(
  SELECT * FROM table1 -- that's to emulate your current query with multiple joins
) q
 GROUP BY ID
样本输出:

| ID | TYPE1 | DATE1 | TYPE2 | DATE2 | LOCATION | RESULT | PROC1 | PROCDATE1 | PROCDETAIL1 | PROCNOTES1 | PROC2 | PROCDATE2 | PROCDETAIL2 | PROCNOTES2 | |----|-------|--------------------------------|-------|--------------------------------|----------|--------|--------|--------------------------------|-----------------|--------------|--------|--------------------------------|-----------------|--------------| | 1 | ABC | January, 01 2010 00:00:00+0000 | XYZ | January, 02 2011 00:00:00+0000 | OK | AO | Proc_B | January, 01 2013 00:00:00+0000 | This is Details | Proc_B Notes | Proc_B | January, 01 2013 00:00:00+0000 | This is Details | Proc_B Notes | |ID |类型1 |日期1 |类型2 |日期2 |位置|结果|过程1 |过程1 |过程1 |过程2 |过程2 |过程2 |过程2| |----|-------|--------------------------------|-------|--------------------------------|----------|--------|--------|--------------------------------|-----------------|--------------|--------|--------------------------------|-----------------|--------------| |1 | ABC | 2010年1月00:00:00+0000 | XYZ | 2011年1月2日00:00+0000 |好| AO | Proc | U B | 2013年1月1日00:00:00+0000 |这是细节| Proc | B注释| Proc | B | 2013年1月1日00:00:00+0000 |这是细节| Proc |注释|
这里是已知的XYG演示,但不是ABC。Thanks@SarojSigdel然后,您很可能不得不求助于动态sql