SQL SELECT - 返回使用另一个表中的值填充的新列

时间:2016-02-09 22:52:26

标签: sql sql-server select

我在数据库中有两个表,如下所示(简化版本):

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,但这些会在我的搜索结果中创建额外的记录。我想将所有产品属性附加到查询中的单个记录中。

任何帮助将不胜感激!

1 个答案:

答案 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