如何将项列表和可能的属性组合到摘要表中

时间:2014-12-24 03:11:44

标签: sql sql-server

我有一张资产表:

 id | name      | cateogoryid
----+-----------+-------------    
  1 | Asset One |           1    
  2 | Asset Two |           2

然后我有一个类别属性表(该类别中资产显示的可能属性)

 id | name            | cateogoryid
----+-----------------+-------------
  1 | Attribute One   |           1
  2 | Attribute Two   |           1
  3 | Attribute Three |           1
  4 | Attribute One   |           2
  5 | Attribute Two   |           2

最后,我有一个表格,它将资产与属性相关联(显示哪些资产展示了哪些属性)

id | assetid | attributeid
----+---------+-------------
  1 | 1       |           1
  2 | 1       |           3
  3 | 2       |           5

我想将此数据转换为一个表格,该表格显示每个资产的每个属性的真/假值:

 asset     | attribute       | result
-----------+-----------------+--------
 Asset One | Attribute One   |  true
 Asset One | Attribute Two   |  false
 Asset One | Attribute Three |  true
 Asset Two | Attribute One   |  false
 Asset Two | Attribute Two   |  true

我对此做了一些研究,但很难找到任何相关的例子,因为我并不知道该搜索什么。

非常感谢。

2 个答案:

答案 0 :(得分:0)

我还没有对查询进行过测试,但这样的事情会让你开始......

SELECT asset.name,
       attribute.name,
       CASE WHEN asset_attribute.Id IS NOT NULL THEN 'true' else 'false' END AS result
FROM asset 
CROSS JOIN attribute 
LEFT JOIN asset_attribute
ON asset.id = asset_attribute.assetid
WHERE asset.categoryId = attribute.categoryId

答案 1 :(得分:0)

您可能想尝试一下:

SELECT
  Asset.name asset
  , Attribute.name attribute
  , CASE WHEN (SELECT id FROM Asset_Attribute WHERE Asset_Attribute.assetID = Asset.id AND Asset_Attribute.attributeID = Attribute.id) IS NULL THEN 'FALSE' ELSE 'TRUE' END result
FROM Asset
INNER JOIN Attribute
  ON Asset.categoryID = Attribute.categoryID
ORDER BY Asset.id, Attribute.id;

查看实际操作:SQL Fiddle

但是,我承认,我并没有完全遵循你的设置。但这可能是由于所提供的只是更大背景的一部分。