【问题标题】:Create Non duplicate view in SQL在 SQL 中创建非重复视图
【发布时间】:2017-06-08 17:58:02
【问题描述】:

我有两张桌子

  1. 开发者

    • Developer_Id
    • 全名
    • 手机号码
    • 电子邮件地址
    • 团队
    • 角色
    • 分配给
  2. 工作清单

    • Job_Id
    • 作业名称
    • 作业说明
    • 创建者
    • 创建日期
    • 截止日期
    • 状态

我想查看 JobList 表,但它应该包括:

  • Developers.Full Name
  • Developers.Team
  • Developers.Role
  • Developers.Assigned To

我创建了一个视图,但它返回的重复值如下:

有什么方法可以在一行中查看 JobList 表,但包括 Developers 表中的多行,像这样

这是我使用的代码

创建表:

CREATE TABLE [dbo].[Developers] (
[Developer_Id]     INT          NOT NULL,
[Full Name]        VARCHAR (50) NULL,
[Cellphone number] VARCHAR (50) NULL,
[Email address]    VARCHAR (50) NULL,
[Team]             VARCHAR (50) NULL,
[Role]             VARCHAR (50) NULL, 
[Assigned To] INT NULL, 
CONSTRAINT [PK_Developers] PRIMARY KEY ([Developer_Id])
);

CREATE TABLE [dbo].[JobList] (
[Job_Id]                 INT           NOT NULL,
[Assignment Name]        VARCHAR (50)  NULL,
[Assignment Description] VARCHAR (MAX) NULL,
[Created By]             VARCHAR (50)  NULL,
[Date Created]           DATE          NULL,
[Due Date]               DATE          NULL, 
[Status] VARCHAR(50) NULL, 
CONSTRAINT [PK_JobList] PRIMARY KEY ([Job_Id])
);

创建视图

CREATE VIEW [dbo].AssignedJobs
AS SELECT JobList.[Assignment Name], JobList.[Assignment Description], JobList.[Due Date], JobList.[Status],Developers.[Full Name], Developers.[Role]
from JobList
inner join Developers
on JobList.Job_Id = Developers.[Assigned To]

【问题讨论】:

  • 你得到的结果是连接是如何工作的,你不能有一个包含多行的单行。
  • 您的预期输出与 SQL Server 实际输出的任何内容都不对应。你能忍受全名显示为 CSV,例如User1, User2?还是你想要别的?
  • 您还可以将开发人员姓名转至列。 stackoverflow.com/questions/15931607/…
  • 我应该怎么做才能获得单行?

标签: sql sql-server


【解决方案1】:
CREATE VIEW [dbo].AssignedJobs
AS SELECT JobList.[Assignment Name], JobList.[Assignment Description], 
JobList.[Due Date], JobList.[Status],Developers.[Full Name], Developers.[Role]
from JobList
inner join Developers
on JobList.Job_Id = Developers.[Assigned To]
group by JobList.[Assigment Name], JobList.[Assignment Description], JobList.[Due Date], JobList[Status], string_agg(Developers.[Full Name], ' ') as [Full Name], string_agg (Developers.Role, ' ') as Role

如果您不在 SQL Server 2017/Azure 上,请使用以下内容:Agg with Stuff and XML FOR PATH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2013-09-06
    • 2021-05-24
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多