Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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
在pivot聚合函数中使用CONCAT函数时发生SQL Server错误_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

在pivot聚合函数中使用CONCAT函数时发生SQL Server错误

在pivot聚合函数中使用CONCAT函数时发生SQL Server错误,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有一个输出枢轴的SQL查询 我试图做的是将CONCAT函数添加到pivot中,但我得到以下错误: “CONCAT”不是可识别的聚合函数 我的当前代码(给出错误): 如果我将第二行更改为(删除CARs): 如果我将我的分组按更改为(删除车辆和CONCAT功能): 它可以工作,但我希望在结果中连接 当前工作输出: Time 02 06 10 2018-05-07 16:00:00.000 11 NULL NULL 2018-

我有一个输出枢轴的SQL查询

我试图做的是将
CONCAT
函数添加到
pivot
中,但我得到以下错误:

“CONCAT”不是可识别的聚合函数

我的当前代码(给出错误):

如果我将第二行更改为(删除
CARs
):

如果我将我的
分组按
更改为(删除
车辆
CONCAT
功能):

它可以工作,但我希望在结果中连接

当前工作输出:

Time                      02    06      10
2018-05-07 16:00:00.000   11    NULL    NULL
2018-05-07 16:15:00.000   2     7       NULL
2018-05-07 16:30:00.000   NULL  8       NULL
2018-05-07 16:45:00.000   9     NULL    NULL
2018-05-07 17:00:00.000   9     NULL    8
预期输出(含
CONCAT
):

查询中的示例数据,不带
透视

Time                        AREA    BLOBs   CARs
2018-05-07 16:00:00.000     02      11      BMW
2018-05-07 16:15:00.000     02      2       BMW
2018-05-07 16:15:00.000     06      7       KIA
2018-05-07 16:30:00.000     06      8       KIA
2018-05-07 16:45:00.000     02      9       BMW
2018-05-07 17:00:00.000     02      9       BMW
2018-05-07 17:00:00.000     10      8       FIAT

表中的原始样本数据:

您可以在下面尝试-您需要在pivot中使用聚合函数,以便在您的情况下可以使用
max(CONCAT(sum(blob),CARs))

试试这个

CREATE TABLE #PIVOT (Time  DATETIME, AREA INT, BLOBs INT, CARs VARChar (10))

insert into #PIVOT values 
 ('2018-05-07 16:00:00.000', 02, 11     ,'BMW')
,('2018-05-07 16:15:00.000', 02, 2      ,'BMW')
,('2018-05-07 16:15:00.000', 06, 7      ,'KIA')
,('2018-05-07 16:30:00.000', 06, 8      ,'KIA')
,('2018-05-07 16:45:00.000', 02, 9      ,'BMW')
,('2018-05-07 17:00:00.000', 02, 9      ,'BMW')
,('2018-05-07 17:00:00.000', 10, 8      ,'FIA')


select
 Time, CARs + convert (varchar (10), [02]) [02]
 , CARs + convert (varchar (10), [06]) [06], CARs + convert (varchar (10), [10]) [10]
from (
 select
 *
 from #PIVOT
) p
pivot
(
max (BLOBs) for area in ([02],[06], [10])
) t

Time                        02      06      10
2018-05-07 16:00:00.000     BMW11   NULL    NULL
2018-05-07 16:15:00.000     BMW2    NULL    NULL
2018-05-07 16:45:00.000     BMW9    NULL    NULL
2018-05-07 17:00:00.000     BMW9    NULL    NULL
2018-05-07 17:00:00.000     NULL    NULL    FIA8
2018-05-07 16:15:00.000     NULL    KIA7    NULL
2018-05-07 16:30:00.000     NULL    KIA8    NULL

让我来处理动态查询。

使用一些示例数据和预期结果,这可能会更容易回答。现在添加:)…示例数据呢?这只是预期输出和当前输出。@Larnu在没有数据透视的情况下添加了输出,“(”附近出现
错误语法。
分组依据错误line@Matt,如果您在这里创建一个db fiddle,那么很容易找到me@fa86我已经在问题解决方案中添加了一些示例数据!
Time                      02    06      10
2018-05-07 16:00:00.000   11    NULL    NULL
2018-05-07 16:15:00.000   2     7       NULL
2018-05-07 16:30:00.000   NULL  8       NULL
2018-05-07 16:45:00.000   9     NULL    NULL
2018-05-07 17:00:00.000   9     NULL    8
Time                      02        06      10
2018-05-07 16:00:00.000   BMW11     NULL    NULL
2018-05-07 16:15:00.000   BMW2      KIA7    NULL
2018-05-07 16:30:00.000   NULL      KIA8    NULL
2018-05-07 16:45:00.000   BMW9      NULL    NULL
2018-05-07 17:00:00.000   BMW9      NULL    FIAT8
Time                        AREA    BLOBs   CARs
2018-05-07 16:00:00.000     02      11      BMW
2018-05-07 16:15:00.000     02      2       BMW
2018-05-07 16:15:00.000     06      7       KIA
2018-05-07 16:30:00.000     06      8       KIA
2018-05-07 16:45:00.000     02      9       BMW
2018-05-07 17:00:00.000     02      9       BMW
2018-05-07 17:00:00.000     10      8       FIAT
    SELECT * FROM (
SELECT dateadd(minute,(datediff(minute,0,Time)/15)*15,0) Time,  AREA, COUNT(BLOB) BLOBs, CARS
FROM 
(SELECT BLOB, Time, CARS, DRIVER, [MK], AREA, Tier FROM (
SELECT [BLOB Nbr] BLOB, Time, CARS, [From PT], [To PT], [From PN], [To PN], DRIVER, [MK],
CASE AREA
WHEN '01' THEN '02' WHEN '03' THEN '02'
WHEN '05' THEN '06' WHEN '07' THEN '06'
WHEN '09' THEN '10' WHEN '11' THEN '10'
ELSE AREA END AREA, 
Position, Tier
FROM (
SELECT [BLOB Nbr], T_IME Time, [C NAME] CARS, [From PT], [To PT], [From PN], [To PN], [C V] DRIVER, [MK],
CASE WHEN [From PT] = 'DRIVER' THEN LEFT(RIGHT([From PN],6),2) ELSE LEFT(RIGHT([To PN],6),2) END AREA,
CASE WHEN [From PT] = 'DRIVER' THEN LEFT(RIGHT([From PN],4),2) ELSE LEFT(RIGHT([To PN],4),2) END Position,
CASE WHEN [From PT] = 'DRIVER' THEN RIGHT([From PN],2) ELSE RIGHT([To PN],2) END Tier
FROM mytable c
WHERE ([From PT] = 'DRIVER' OR [To PT] = 'DRIVER')
) a ) b ) c
GROUP BY dateadd(minute,(datediff(minute,0,Time)/15)*15,0),  AREA, CARS) src pivot(max(CONCAT(sum(BLOBs),CARs)) for AREA in ([02],[06],[10])) piv;
CREATE TABLE #PIVOT (Time  DATETIME, AREA INT, BLOBs INT, CARs VARChar (10))

insert into #PIVOT values 
 ('2018-05-07 16:00:00.000', 02, 11     ,'BMW')
,('2018-05-07 16:15:00.000', 02, 2      ,'BMW')
,('2018-05-07 16:15:00.000', 06, 7      ,'KIA')
,('2018-05-07 16:30:00.000', 06, 8      ,'KIA')
,('2018-05-07 16:45:00.000', 02, 9      ,'BMW')
,('2018-05-07 17:00:00.000', 02, 9      ,'BMW')
,('2018-05-07 17:00:00.000', 10, 8      ,'FIA')


select
 Time, CARs + convert (varchar (10), [02]) [02]
 , CARs + convert (varchar (10), [06]) [06], CARs + convert (varchar (10), [10]) [10]
from (
 select
 *
 from #PIVOT
) p
pivot
(
max (BLOBs) for area in ([02],[06], [10])
) t

Time                        02      06      10
2018-05-07 16:00:00.000     BMW11   NULL    NULL
2018-05-07 16:15:00.000     BMW2    NULL    NULL
2018-05-07 16:45:00.000     BMW9    NULL    NULL
2018-05-07 17:00:00.000     BMW9    NULL    NULL
2018-05-07 17:00:00.000     NULL    NULL    FIA8
2018-05-07 16:15:00.000     NULL    KIA7    NULL
2018-05-07 16:30:00.000     NULL    KIA8    NULL