sql - SQL Server:在分组语句中连接主键 ID
问题描述
我正在尝试选择一组分组的行并将这些行主键值连接到 select 语句中,并对行进行计数并选择该值。
表:
JobTable
- JobID、ExpressJob、ItemIDItemTable
- ItemID、颜色、尺寸
中的值Jobs
:
10001, true, 3
10002, true, 3
10003, false, 4
中的值Items
:
3, Blue, 1-2
4, Pink, 5-6
结果集:
3,Blue,1-2,10001|10002
3,Pink,5-6,10003
我在 select 语句中探索了以下内容:
SELECT
i.ItemID, i.Colour, i.Size,
COUNT(i.ItemID) AS Quantity,
j.ExpressJob,
JobIDArray = STUFF((SELECT CONVERT(VARCHAR(10), jb.JOBID)
FROM Jobs jb
WHERE jb.JobID = j.JobID
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, ''))
FROM
Jobs j
INNER JOIN
Items i ON i.ItemID = j.ItemID
GROUP BY
i.ItemID, i.Colour, i.Size, j.ExpressJob
但我不断收到聚合组错误JobID
。根据我在网上研究的 FROM XML 是可行的方法,但由于某种原因在选择 ID 列时无效。
解决方案
对你已经拥有的东西进行小的调整会让你到达那里。试试这个:
DECLARE @Jobs TABLE
(
[JobID] INT
, [ExpressJob] NVARCHAR(100)
, [ItemID] INT
);
DECLARE @Items TABLE
(
[ItemID] INT
, [Colour] NVARCHAR(100)
, [Size] NVARCHAR(100)
);
INSERT INTO @Jobs (
[JobID]
, [ExpressJob]
, [ItemID]
)
VALUES ( 10001, 'true', 3 )
, ( 10002, 'true', 3 )
, ( 10003, 'false', 4 );
INSERT INTO @Items (
[ItemID]
, [Colour]
, [Size]
)
VALUES ( 3, 'Blue', '1-2' )
, ( 4, 'Pink', '5-6' );
SELECT [i].[ItemID]
, [i].[Colour]
, [i].[Size]
, [j].[ExpressJob]
, COUNT([i].[ItemID]) AS [Quantity]
--Added '|' as that was how you wanted the results delimited
, STUFF((
SELECT '|' + CONVERT(VARCHAR(10), [jb].[JobID])
FROM @Jobs [jb]
WHERE [jb].[ItemID] = [i].[ItemID] --Change here as you're looking for JobID associated to the Item.
FOR XML PATH('') --No need to set TYPE or use '.value'
)
, 1
, 1
, ''
) AS JobIDArray
FROM @Jobs [j]
INNER JOIN @Items [i]
ON [i].[ItemID] = [j].[ItemID]
GROUP BY [i].[ItemID]
, [i].[Colour]
, [i].[Size]
, [j].[ExpressJob];
推荐阅读
- angular - ngif if 为 false 进入循环
- azureservicebus - 逻辑应用程序:具有并发控制的 ServiceBus 触发器导致 peek-lock 超时
- libpqxx - 将 libpqxx 库添加到 cmake
- mysql - 单表与多表
- c++ - 什么是 int(*)[] 类型
- java - 使用 @ControllerAdvice 处理 Spring 异常提供了集中控制,但我们必须在方法签名中添加所有 throws 异常
- azure - Application Insights 在 Azure 容器的 Web 应用中不起作用
- angular - Angular 5 之后的所有自定义 javascript
不工作 - javascript - Kendo Grid:在 .read() 之后,标头中的选中所有复选框停止工作
- c - 带有 XC8 v1.43 的 PIC16F1717,可用于键盘按键