3

以下の5つのテーブルがあります-

   CREATE TABLE [dbo].[MSP_EpmProject](
    [ProjectUID] [uniqueidentifier] NOT NULL,
    [ProjectName] [nvarchar](255) NOT NULL,
    [ProjectAuthorName] [nvarchar](255) NULL,
 CONSTRAINT [PK_MSP_EpmProject] PRIMARY KEY CLUSTERED 
([ProjectUID] ASC)) 

CREATE TABLE [dbo].[Project_CI_Mapping](
    [ProjectName] [nvarchar](255) NOT NULL,
    [CI] [nvarchar](100) NOT NULL)

CREATE TABLE [dbo].[ca_owned_resource]( 
    [resource_name] [nvarchar](100) NOT NULL,
    [resource_description] [nvarchar](255) NULL,
    [resource_family] [int] NULL,
    [resource_class] [int] NOT NULL,
    [resource_status] [int] NULL,   
    [resource_tag] [nvarchar](64) NULL)

CREATE TABLE [dbo].[DimTeamProject](
    [ProjectNodeSK] [int] IDENTITY(1,1) NOT NULL,
    [ProjectNodeGUID] [uniqueidentifier] NOT NULL,
    [ProjectNodeName] [nvarchar](256) NULL,
PRIMARY KEY CLUSTERED 
([ProjectNodeSK] ASC))

CREATE TABLE [dbo].[DimIteration](
    [IterationSK] [int] IDENTITY(1,1) NOT NULL,
    [IterationName] [nvarchar](256) NULL,
    [IterationGUID] [nvarchar](256) NOT NULL,   
PRIMARY KEY CLUSTERED 
([IterationSK] ASC))

すべてのテーブルから列を取得しようとする単純なクエリがありますが、重複した値が返されます。INNER JOIN を試行すると重複した値が返され、LEFT OUTER JOIN を試行すると、「DimIteration.IterationName」に NULL 値が返されます。

クエリは -

select m.ProjectName,m.ProjectAuthorName "Project Manager", p.CI,c.resource_tag "Alt CI ID", i.IterationName 
from MSP_EpmProject m, Project_CI_Mapping p, ca_owned_resource c, DimTeamProject t, DimIteration i
where i.ProjectGUID = UPPER(CAST(t.ProjectNodeGUID AS NVARCHAR(256)))
and p.CI = c.resource_name
and m.ProjectName = p.ProjectName
order by m.ProjectName,m.ProjectAuthorName, p.CI,c.resource_tag, i.IterationName

可能なマッピングは -

MSP_EpmProject.ProjectName =  Project_CI_Mapping.ProjectName 
Project_CI_Mapping.CI = ca_owned_resource.resource_name
ca_owned_resource.resource_tag = DimTeamProject.ProjectNodeName
DimIteration.ProjectGUID = UPPER(CAST(DimTeamProject.ProjectNodeGUID AS NVARCHAR(256)))

同じことに適した解決策は何ですか?

ありがとう。

4

2 に答える 2

1

質問を詳しく調べなくても、重複を取り除く 1 つの方法は、次のように の前にGROUP BY句を挿入することです。ORDER BY

select m.ProjectName,m.ProjectAuthorName "Project Manager", p.CI,c.resource_tag "Alt CI ID", i.IterationName 
from MSP_EpmProject m, Project_CI_Mapping p, ca_owned_resource c, DimTeamProject t, DimIteration i
where i.ProjectGUID = UPPER(CAST(t.ProjectNodeGUID AS NVARCHAR(256)))
and p.CI = c.resource_name
and m.ProjectName = p.ProjectName
GROUP BY m.ProjectName,m.ProjectAuthorName, p.CI,c.resource_tag, i.IterationName
order by m.ProjectName,m.ProjectAuthorName, p.CI,c.resource_tag, i.IterationName

もう 1 つの方法は、返したい最初の列の前後DISTINCTに挿入することです。SELECT

例えばSELECT DISTINCT m.ProjectName...

于 2013-07-10T15:02:19.113 に答える