SQL Server 聚合新列中的行

yfjy0ee7  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(114)

我想连接前两个表(Product和ProductProperties)以获得底部的结果。

我该怎么做呢?

3qpi33ja

3qpi33ja1#

我不是说EAV是邪恶的,但应该谨慎地部署,并有很好的先见之明。
这里有两个例子,第一个是PIVOT,第二个是conditional aggregation
我倾向于使用conditional aggregation,它提供了更大的灵活性,而且通常会提高性能
未经测试,因为您未提供文本形式的样本数据和所需结果

Select *
 From  (
         Select A.product_id
               ,A.product_name
               ,B.product_property
               ,B.product_property_value
          From  Product A
          Join ProductProperties B on A.product_id=B.product_di
       ) src
 Pivot (max( product_property_value ) for product_property in ([Price],[Category],[Status] ) ) pvt
Select A.product_id
      ,A.product_name
      ,Price    = max( case when product_propery='Price'    then product_propery_value end)
      ,Category = max( case when product_propery='Category' then product_propery_value end)
      ,Status   = max( case when product_propery='Status'   then product_propery_value end)
 From  Product A
 Join  ProductProperties B on A.product_id=B.product_di
 Group By A.product_id,A.product_name
iyfamqjs

iyfamqjs2#

SELECT
b.product_id
,b.product_name
,Price = MAX(IIF(p.product_property = 'Price',p.product_property_value,NULL))
,Category = MAX(IIF(p.product_property = 'Category',p.product_property_value,NULL))
,Status = MAX(IIF(p.product_property = 'Status',p.product_property_value,NULL))
FROM books b (nolock)
JOIN prodprop p (nolock)
ON b.product_id = p.product_id
GROUP BY b.product_id,b.product_name

相关问题