Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/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 2016合并数据透视表中的行_Sql_Sql Server_Pivot Table - Fatal编程技术网

SQL server 2016合并数据透视表中的行

SQL server 2016合并数据透视表中的行,sql,sql-server,pivot-table,Sql,Sql Server,Pivot Table,我在SQL Server 2016中使用以下查询创建了一个透视表 WITH PivotData AS ( select [T_Spec_Char].[ID], format([T_Sample].[TimeStamp], 'dd/MM/yyyy') as DT, format([T_Sample].[TimeStamp], 'hh:mm:ss') as TM, [T_Spec_Char].[Spec_Char], [T_Spec].[Line], cast

我在SQL Server 2016中使用以下查询创建了一个透视表

WITH PivotData AS
(
select [T_Spec_Char].[ID],
    format([T_Sample].[TimeStamp], 'dd/MM/yyyy') as DT,
    format([T_Sample].[TimeStamp], 'hh:mm:ss') as TM,
    [T_Spec_Char].[Spec_Char],
    [T_Spec].[Line],
    cast([T_Sample].[Value] as float) as Val
from [ABC].[dbo].[T_Spec_Char], [ABC].[dbo].[T_Sample], [ABC].[dbo].[T_Spec] 
where [T_Sample].[Spec_Char_ID] = [T_Spec_Char].[ID] and 
    ([T_Spec_Char].[Spec_Char] = 'Zone1Temp' or [T_Spec_Char].[Spec_Char] = 'Zone2Temp' 
    or [T_Spec_Char].[Spec_Char] = 'Zone3Temp') 
    and [T_Sample].[Spec_ID] = [T_Spec].[ID]
group by [T_Spec_Char].[ID], [T_Sample].[TimeStamp], [T_Spec_Char].[Spec_Char], 
    [T_Spec].[Line], [T_Sample].[Value]
)

SELECT
    DT,
    TM,
    [Line],
    Zone1Temp, 
    Zone2Temp, 
    Zone3Temp
FROM PivotData
PIVOT
(
    SUM(Val)
    FOR Spec_Char
    IN (Zone1Temp, Zone2Temp, Zone3Temp)
) AS PivotResult
ORDER BY DT, TM
结果如下所示:

DT          TM          Line    Zone1Temp  Zone2Temp  Zone3Temp  
07/02/2017  01:21:55    Line2   310        NULL       NULL
07/02/2017  01:21:55    Line2   NULL       330        NULL
07/02/2017  01:21:55    Line2   NULL       NULL       345
07/02/2017  01:51:56    Line2   310        NULL       NULL
07/02/2017  01:51:57    Line2   NULL       330        NULL
07/02/2017  01:51:57    Line2   NULL       NULL       345
07/02/2017  02:21:56    Line2   310        NULL       NULL
07/02/2017  02:21:56    Line2   NULL       330        NULL
07/02/2017  02:21:56    Line2   NULL       NULL       345
07/02/2017  02:51:56    Line2   310        NULL       NULL
07/02/2017  02:51:56    Line2   NULL       330        NULL
07/02/2017  02:51:56    Line2   NULL       NULL       345
07/02/2017  03:21:56    Line2   310        NULL       NULL
07/02/2017  03:21:56    Line2   NULL       330        NULL
07/02/2017  03:21:58    Line2   NULL       NULL       345
07/02/2017  03:51:56    Line2   310        NULL       NULL
07/02/2017  03:51:57    Line2   NULL       330        NULL
07/02/2017  03:51:57    Line2   NULL       NULL       345
如何将日期和时间相同的行(如上面查询结果中的前3行)合并到一行中

@诺克斯龙。您的查询将产生以下结果:

DT          TM          Line    Temp
07/02/2017  01:21:55    Line2   310
07/02/2017  01:21:55    Line2   330
07/02/2017  01:21:55    Line2   345
07/02/2017  01:51:56    Line2   310

I would like to be able to see:
DT          TM          Line    Zone1Temp  Zone2Temp  Zone3Temp  
07/02/2017  01:21:55    Line2   310        330        345

未测试,但您应该使用类似的方法对这些行进行分组:

SELECT
    DT,
    TM,
    [Line],
    COALESCE(Zone1Temp, Zone2Temp, Zone3Temp) AS Temp
FROM PivotData
PIVOT
(
    SUM(Val)
    FOR Spec_Char
    IN (Zone1Temp, Zone2Temp, Zone3Temp)
) AS PivotResult
GROUP BY DT, TM, [Line], COALESCE(Zone1Temp, Zone2Temp, Zone3Temp)
ORDER BY DT, TM

最简单的方法是从PivotData cte中删除ID

WITH PivotData AS
(
select -- remove this field [T_Spec_Char].[ID],
    format([T_Sample].[TimeStamp], 'dd/MM/yyyy') as DT,
    format([T_Sample].[TimeStamp], 'hh:mm:ss') as TM,
    [T_Spec_Char].[Spec_Char],
    [T_Spec].[Line],
    cast([T_Sample].[Value] as float) as Val
from [ABC].[dbo].[T_Spec_Char], [ABC].[dbo].[T_Sample], [ABC].[dbo].[T_Spec] 
where [T_Sample].[Spec_Char_ID] = [T_Spec_Char].[ID] and 
    ([T_Spec_Char].[Spec_Char] = 'Zone1Temp' or [T_Spec_Char].[Spec_Char] = 'Zone2Temp' 
    or [T_Spec_Char].[Spec_Char] = 'Zone3Temp') 
    and [T_Sample].[Spec_ID] = [T_Spec].[ID]
group by [T_Spec_Char].[ID], [T_Sample].[TimeStamp], [T_Spec_Char].[Spec_Char], 
    [T_Spec].[Line], [T_Sample].[Value]
)

SELECT
    DT,
    TM,
    [Line],
    Zone1Temp, 
    Zone2Temp, 
    Zone3Temp
FROM PivotData
PIVOT
(
    SUM(Val)
    FOR Spec_Char
    IN (Zone1Temp, Zone2Temp, Zone3Temp)
) AS PivotResult
ORDER BY DT, TM
从CTE中删除ID。PIVOT本质上是由除aggregate和for列之外的所有列分组的。按ID分组使行保持分离

WITH PivotData AS
(
select format([T_Sample].[TimeStamp], 'dd/MM/yyyy') as DT,
    format([T_Sample].[TimeStamp], 'hh:mm:ss') as TM,
    [T_Spec_Char].[Spec_Char],
    [T_Spec].[Line],
    cast([T_Sample].[Value] as float) as Val
from [ABC].[dbo].[T_Spec_Char], [ABC].[dbo].[T_Sample], [ABC].[dbo].[T_Spec] 
where [T_Sample].[Spec_Char_ID] = [T_Spec_Char].[ID] and 
    ([T_Spec_Char].[Spec_Char] = 'Zone1Temp' or [T_Spec_Char].[Spec_Char] = 'Zone2Temp' 
    or [T_Spec_Char].[Spec_Char] = 'Zone3Temp') 
    and [T_Sample].[Spec_ID] = [T_Spec].[ID]
group by [T_Spec_Char].[ID], [T_Sample].[TimeStamp], [T_Spec_Char].[Spec_Char], 
    [T_Spec].[Line], [T_Sample].[Value]
)

SELECT
    DT,
    TM,
    [Line],
    Zone1Temp, 
    Zone2Temp, 
    Zone3Temp
FROM PivotData
PIVOT
(
    SUM(Val)
    FOR Spec_Char
    IN (Zone1Temp, Zone2Temp, Zone3Temp)
) AS PivotResult
ORDER BY DT, TM

请不要使用图像显示您的数据或查询结果。STLDeveloper,将图像更改为上面的列表,谢谢。。。。。请从隐式连接语法逗号分隔从句切换到显式列出连接及其条件。这使得WHERE子句应该主要用于初始FROM子句中的表的主筛选时,更清楚地知道哪些项属于哪些表,仅此而已。如果您按SELECT中的每一列进行分组,您的意思确实是不同的,尽管通常最好找出重复项的来源并停止该操作。此外,您是否可以使用所有列的where表引用更新查询?“我怀疑您可以减少pivot中使用的表的数量,但如果不知道这些列来自何处,就很难说出来。”Clockwork Muse table references补充道。你能举个例子说明你的意思,从隐式连接切换到显式连接和条件吗?