【问题标题】:SQL Concating results from a result setSQL 连接结果集中的结果
【发布时间】:2018-08-10 05:41:16
【问题描述】:

我没有从我的尝试中得到所需的结果。

这是我的 mstTraineeStaff 表 -

CREATE TABLE [dbo].[MstTraineeStaff](
    [Code] [int] IDENTITY(1,1) NOT NULL,
    [GroupCode] [int] NOT NULL,
    [StaffName] [nvarchar](60) NOT NULL,
    [Role] [nvarchar](60) NOT NULL,
    CONSTRAINT [PK_MstTraineeStaff] PRIMARY KEY CLUSTERED 
(
    [Code] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = 
    OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

TraineeSTaff 表中的记录 -

INSERT [dbo].[MstTraineeStaff] ([Code], [GroupCode], [StaffName], [Role]) VALUES (1, 11, N'Parth', N'manager')

INSERT [dbo].[MstTraineeStaff] ([Code], [GroupCode], [StaffName], [Role]) VALUES (2, 11, N'krunal', N'developer')

INSERT [dbo].[MstTraineeStaff] ([Code], [GroupCode], [StaffName], [Role]) VALUES (3, 11, N'dhara', N'developer')

INSERT [dbo].[MstTraineeStaff] ([Code], [GroupCode], [StaffName], [Role]) VALUES (4, 11, N'Harshida', N'Developer')

INSERT [dbo].[MstTraineeStaff] ([Code], [GroupCode], [StaffName], [Role]) VALUES (5, 19, N'dhara', N'develper')

INSERT [dbo].[MstTraineeStaff] ([Code], [GroupCode], [StaffName], [Role]) VALUES (6, 19, N'krunal', N'developer')

INSERT [dbo].[MstTraineeStaff] ([Code], [GroupCode], [StaffName], [Role]) VALUES (7, 19, N'harshida', N'developer')

这是我的 traineeStaff 的详细信息表 -

CREATE TABLE [dbo].[MstImplementerStaffTraningDetail](
    [Code] [int] IDENTITY(1,1) NOT NULL,
    [HeaderCode] [int] NOT NULL,
    [SequenceNo] [int] NOT NULL,
    [ImplementerCode] [int] NOT NULL,
    [ObjectID] [int] NOT NULL,
    [TraningDateTime] [datetime] NOT NULL,
    [IsTrained] [tinyint] NOT NULL,
CONSTRAINT [PK_MstImplementerStaffTraningDetail] PRIMARY KEY CLUSTERED 
(
    [Code] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

明细表中的记录如下 -

INSERT [dbo].[MstImplementerStaffTraningDetail] ([Code], [HeaderCode], [SequenceNo], [ImplementerCode], [ObjectID], [TraningDateTime], [IsTrained]) VALUES (1, 1, 1, 1, 1, CAST(0x0000A937009935AF AS DateTime), 1)

INSERT [dbo].[MstImplementerStaffTraningDetail] ([Code], [HeaderCode], [SequenceNo], [ImplementerCode], [ObjectID], [TraningDateTime], [IsTrained]) VALUES (2, 2, 1, 1, 1, CAST(0x0000A93700A1945A AS DateTime), 1)

INSERT [dbo].[MstImplementerStaffTraningDetail] ([Code], [HeaderCode], [SequenceNo], [ImplementerCode], [ObjectID], [TraningDateTime], [IsTrained]) VALUES (3, 5, 1, 1, 1, CAST(0x0000A93700D63594 AS DateTime), 1)

INSERT [dbo].[MstImplementerStaffTraningDetail] ([Code], [HeaderCode], [SequenceNo], [ImplementerCode], [ObjectID], [TraningDateTime], [IsTrained]) VALUES (4, 6, 1, 1, 1, CAST(0x0000A93700D63596 AS DateTime), 1)

INSERT [dbo].[MstImplementerStaffTraningDetail] ([Code], [HeaderCode], [SequenceNo], [ImplementerCode], [ObjectID], [TraningDateTime], [IsTrained]) VALUES (5, 6, 1, 1, 2, CAST(0x0000A93700D63FC7 AS DateTime), 0)

INSERT [dbo].[MstImplementerStaffTraningDetail] ([Code], [HeaderCode], [SequenceNo], [ImplementerCode], [ObjectID], [TraningDateTime], [IsTrained]) VALUES (6, 5, 1, 1, 3, CAST(0x0000A93700D64786 AS DateTime), 1)

INSERT [dbo].[MstImplementerStaffTraningDetail] ([Code], [HeaderCode], [SequenceNo], [ImplementerCode], [ObjectID], [TraningDateTime], [IsTrained]) VALUES (7, 6, 1, 1, 3, CAST(0x0000A93700D64787 AS DateTime), 1)

INSERT [dbo].[MstImplementerStaffTraningDetail] ([Code], [HeaderCode], [SequenceNo], [ImplementerCode], [ObjectID], [TraningDateTime], [IsTrained]) VALUES (8, 7, 1, 1, 3, CAST(0x0000A93700D64789 AS DateTime), 1)

我需要的结果应该是这样的 -

GroupCode |  StaffName            |  ObjectID
----------+-----------------------+------------
19        | dhara,krunal          |     1
19        | krunal                |     2
19        | dhara,krunal,harshida |     3

但我是这样理解的

GroupCode |  StaffName  |  ObjectID
----------+-------------+------------
19        | dhara       |     1
19        | dhara       |     3
19        | krunal      |     1
19        | krunal      |     2
19        | krunal      |     3
19        | harshida    |     3

到目前为止,我已经尝试过这样的结果-

select MstTraineeStaff.GroupCode,MstTraineeStaff.StaffName,MstImplementerStaffTraningDetail.ObjectID from MstTraineeStaff
    left join MstImplementerStaffTraningDetail on MstImplementerStaffTraningDetail.HeaderCode = MstTraineeStaff.Code
    where GroupCode = 19

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你在使用 SQL Server,如果是,在发帖前have you read this SO question
  • 很抱歉给您带来不便@TimBiegeleisen。我已经读过,但我不知道我的问题有什么问题。请告诉我。
  • 你在下面有一个答案,你想要的查询大概是这个样子。

标签: sql-server-2008


【解决方案1】:

这可能是你想要的:

SELECT
    ts.GroupCode,
    (SELECT (STUFF(
                (SELECT     ',' + trainee.StaffName 
                FROM        MstTraineeStaff trainee LEFT JOIN
                        MstImplementerStaffTraningDetail detail ON detail.HeaderCode = trainee.Code
                WHERE       trainee.GroupCode = ts.GroupCode
                  AND       detail.ObjectID = istd.ObjectID
                FOR XML PATH('')),
        1, 2, ''))) AS StaffNameList,
    istd.ObjectID
FROM MstTraineeStaff ts LEFT JOIN
    MstImplementerStaffTraningDetail istd ON istd.HeaderCode = ts.Code
WHERE ts.GroupCode = 19
GROUP BY ts.GroupCode, istd.ObjectID

主查询只是为每个GroupCode 构建一个有效ObjectID 的列表,然后子查询为每个GroupCode / ObjectID 对构建一个逗号分隔的StaffName 列表。

看到这个db<>fiddle

【讨论】:

  • 它给了我错误 - 无法绑定多部分标识符“MstImplementerStaffTraningDetail.ObjectID”。
  • 再看一遍,发现ObjectID列也属于TraineeStaff表;因此,每个培训详细信息记录中也有多个这样的记录。查看您的示例,很难理解您要通过查询实现的目标。如果您可以从查询中详细说明您真正想要什么,我可能会提供进一步的帮助。
  • 我已经编辑了答案,以便查询从您提供的示例中提供您想要的确切输出;但在不知道您想要实现的确切答案的情况下,我不能保证它正在做您想做的事情。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2017-08-28
相关资源
最近更新 更多