我有以下数据表:
项目表:
ProjID Name
1 A
2 B
项目标签表:
ProjID TagID
1 1
2 2
2 3
标签元数据表:
TagID TagName
1 Series:Go
2 Series:Exploring
3 Chapter:01
ProjID
fild in" Project Tags Table"是" Projects表"。ProjID
字段的外键
TagID
字段"是"标签元数据表"。TagID
字段的外键
醇>
此处,项目包含两种类型的标签:系列和章节。我需要和SQL查询返回一个自定义表,该表将标签元数据表中提到的系列和章节标签名称与项目表中的相应项目相关联。
决赛桌应如下所示:
ProjID Name Series Chapter
1 A Series:GO null
2 B Series:Exploring Chapter:01
答案 0 :(得分:2)
试试这个:
select * from
(select
p.projid,
p.projname,
m.tagname,
case when substring(m.tagname,1,1) = 'S' then 1 else 2 end tagtype --Type
from projects p
left join projecttags t on p.projid = t.projid
left join tagsmetadata m on t.tagid = m.tagid
) as src
pivot
(max(tagname)
for tagtype in ([1],[2])
) as pvt;
我们首先创建一个派生列来检查标记类型,然后将其与PIVOT
一起使用以获得所需的结果。
答案 1 :(得分:1)
这适用于您的样本数据:
select p.ProjID, max(p.Name) as ProjName,
max(case when charindex('Series:', t.TagName) > 0 then t.TagName else null end) Series,
max(case when charindex('Chapter:', t.TagName) > 0 then t.TagName else null end) Chapter
from Projects p
join ProjectTags pt on (pt.ProjID = p.ProjID)
join Tags t on (t.TagID = pt.TagID)
group by p.ProjID
答案 2 :(得分:0)
试试这个
select p.ProjID,Name,case when UCase(SUBSTRING(TagName,1,7))='CHAPTER'
then null else TagName end "Series",
case when UCase(SUBSTRING(TagName,1,7))='CHAPTER'
then TagName else null end "Chapter"
from TagsMetadata t
join ProjectTags p on p.TagID=t.TagID
join Projects p1 on p1.ProjID=p.ProjId