首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server :在分组语句中连接主键ID

Server :在分组语句中连接主键ID
EN

Stack Overflow用户
提问于 2018-11-05 17:55:09
回答 1查看 198关注 0票数 0

我正在尝试选择一组成组的行,并将这些行的主键值连接到select语句中,并对行进行计数并选择该值。

表:

  • JobTable - JobID,ExpressJob,ItemID
  • ItemTable - ItemID,颜色,尺寸

Jobs中的值

代码语言:javascript
复制
10001, true, 3
10002, true, 3
10003, false, 4

Items中的值

代码语言:javascript
复制
3, Blue, 1-2
4, Pink, 5-6

结果集:

代码语言:javascript
复制
3,Blue,1-2,10001|10002
3,Pink,5-6,10003

我在select语句中研究了以下内容:

代码语言:javascript
复制
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上得到一个聚合组错误。从我在网上研究的情况来看,XML是可行的,但由于某些原因,在选择ID列时并不有效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-05 18:38:45

只要稍微调整一下你已经拥有的东西,你就能做到这一点。试试看:

代码语言:javascript
复制
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];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53159693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档