【发布时间】:2016-10-04 15:19:48
【问题描述】:
我已经成功地用这种格式的查询对表进行了透视:
数据透视表
SELECT returnColumn, ISNULL(rule1,0), ISNULL(rule2,0)
FROM (SELECT DISTINCT returnColumn,
ruleColumn,
bool
FROM tableRules) AS st
PIVOT (AVG(bool) FOR ruleColumn IN (rule1,rule2) As pt
ORDER BY returnColumn
编辑
我的透视表格式如下:
+--------------+---------------------+
| returnColumn | rule1 rule2 rule3 |
+--------------+---------------------+
| return1 | 0 1 0 |
| return2 | 1 0 1 |
+--------------+---------------------+
还有另一个表otherRuleTable,其中包含returnColumn 和rule4 列。它看起来像这样:
+--------------+-------+
| returnColumn | rule4 |
+--------------+-------+
| return1 | 1 |
| return2 | 1 |
+--------------+-------+
我希望发生这种情况:
+--------------+---------------------------+
| returnColumn | rule1 rule2 rule3 rule4|
+--------------+---------------------------+
| return1 | 0 1 0 1 |
| return2 | 1 0 1 1 |
+--------------+---------------------------+
尝试
我认为这需要左连接,但我在语法上遇到了困难。我试过这个:
(SELECT returnColumn, ISNULL(rule1,0), ISNULL(rule2,0)
FROM (SELECT DISTINCT returnColumn,
ruleColumn,
bool
FROM tableRules) AS SourceTable
PIVOT (AVG(bool) FOR ruleColumn IN (rule1,rule2) As pt)
LEFT JOIN
(SELECT rule4 FROM otherRuleTable ort)
ON pt.returnColumn = ort.returnColumn
ORDER BY returnColumn
我怎样才能做到这一点?
回答
【问题讨论】:
-
这是一个很好的起点。 spaghettidba.com/2015/04/24/…
标签: sql-server join pivot