我在数据库中有两个表,如下所示(简化版本):
ProductDescriptions
| ProductId | CategoryId | Url | Image | Description |
|-----------|------------|--------------|-------------|-------------|
| product01 | 1 | /page01.html | image01.jpg | Lorem ipsum |
| product02 | 1 | /page02.html | image02.jpg | Lorem ipsum |
| product03 | 2 | /page03.html | image03.jpg | Lorem ipsum |
ProductAttributes
| ProductId | Attribute | Value |
|-----------|-------------|--------|
| product01 | Inch/Metric | Metric |
| product01 | Weight | 2lb |
| product01 | Size | 8in |
| product02 | Inch/Metric | Inch |
| product02 | Weight | 1lb |
| product02 | Size | 5in |
etc...
如何使用ProductDescriptions
CategoryId
选择01
中的所有行,还可以将第二个表中的关联属性作为新列返回?列名可以手动定义。结果看起来像这样:
期望的结果
| ProductId | CategoryId | Url | Image | Description | Inch/Metric | Weight | Size |
|-----------|------------|--------------|-------------|-------------|-------------|--------|------|
| product01 | 01 | /page01.html | image01.jpg | Lorem Ipsum | Metric | 2lb | 8in |
| product02 | 01 | /page02.html | image02.jpg | Lorem Ipsum | Inch | 1lb | 5in |
我尝试过使用各种形式的JOIN
,但这些会在我的搜索结果中创建额外的记录。我想将所有产品属性附加到查询中的单个记录中。
任何帮助将不胜感激!
答案 0 :(得分:1)
你可以这样做:
with t1 as (
select *
from ProductAttributes as pa
PIVOT (max(value) FOR Attribute in ([Inch/Metric], Weight, Size)) as P
)
select pd.ProductId, CategoryId, Url, Image, Description, [Inch/Metric], Weight, Size
from ProductDescriptions as pd
inner join t1
on pd.ProductId = t1.ProductId
where CategoryId = 1
请参阅此处运行示例:http://sqlfiddle.com/#!6/fe4ad/3