【发布时间】:2012-03-19 00:58:37
【问题描述】:
我使用 OUTER JOIN 来获取存储在行中的值并将它们显示为列。当没有值时,我在列中显示 NULL。
源表:
Id|Name|Value
01|ABCG|,,,,,
01|ZXCB|.....
02|GHJK|;;;;;
查看:
Id|ABCG|ZXCB|GHJK
01|,,,,|....|NULL
02|NULL|NULL|;;;;
查询看起来像:
SELECT DISTINCT
b.Id,
bABCG.Value AS "ABCG"
bZXCB.Value AS "ZXCB"
bGHJK.Value AS "GHJK"
FROM
Bars b
LEFT JOIN Bars bABCG ON b.Id = bABCG.Id and b.Name = 'ABCG'
LEFT JOIN Bars bZXCB ON b.Id = bZXCB.Id and b.Name = 'ZXCB'
LEFT JOIN Bars bGHJK ON b.Id = bGHJK.Id and b.Name = 'GHJK'
我想删除 LEFT JOIN,因为它在索引视图中是不允许的。我尝试用内部 SELECT 替换它,但内部 SELECT 也不允许,UNION 也不允许。我不能使用 INNER JOIN 因为我想在视图中显示 NULL。我应该使用什么?
【问题讨论】:
-
你试过用
FROM bars b,bars b1,bars b2 where (b.id=b2.id and b.name='asdfa') and (b.id=b2.id and b.name='sdaf') .... -
是的,但这不会返回空值。
-
提示:如果您遇到了一个限制,在索引视图中不允许使用特定方法,那么您尝试的任何其他形式(产生相同的结果集)也将不允许。您将无法使用您所描述的形状生成索引视图。
-
另外,即使有针对连接问题的解决方法(正如我所说,我怀疑没有),也不允许在索引视图中使用
DISTINCT。 -
DISTINCT可以去掉,没问题。感谢您注意到这一点。
标签: sql sql-server views left-join indexing