SQL Server创建排序视图
我有一个具有以下结构的数据库表: 表A 文档ID |状态SQL Server创建排序视图,sql,sql-server,Sql,Sql Server,我有一个具有以下结构的数据库表: 表A 文档ID |状态 1 | 0 2 | 1 表B PK|u ID | DOC|u ID | NAME | VALUE 1 | 1 | A | 1 2 | 1 | B | 2 3 | 2 | A | 1 4 | 2 | B | 1 5 | 2 | C | 1 DOC_ID是表_B上的外键 然
1 | 0
2 | 1
表B
PK|u ID | DOC|u ID | NAME | VALUE
1 | 1 | A | 1
2 | 1 | B | 2
3 | 2 | A | 1
4 | 2 | B | 1
5 | 2 | C | 1
DOC_ID是表_B上的外键
然后我创建一个视图,这样我就可以更容易地按名称排序
CREATE VIEW [dbo].[V_MY_VIEW] AS
SELECT a.DOC_ID, a1.VALUE AS 'A', a2.VALUE AS 'B', a3.VALUES AS 'C'
FROM dbo.TABLE_A a,
( SELECT DOC_ID, VALUE FROM dbo.TABLE_B WHERE NAME = 'A') a1
LEFT OUTER JOIN ( SELECT DOC_ID, VALUE FROM dbo.TABLE_B WHERE NAME = 'B') a2
ON a1.DOC_ID = a2.DOC_ID
LEFT OUTER JOIN ( SELECT DOC_ID, VALUE FROM dbo.TABLE_B WHERE NAME = 'C') a3
ON a1.DOC_ID = a3.DOC_ID
WHERE a.STATUS IN (0, 1)
此视图将仅包括DOC_ID=2的行,因为DOC_ID=1的行没有NAME=C的行。我应该如何修改视图,使其包括表_B中的所有行
谢谢
SELECT * FROM TABLE_A LEFT OUTER JOIN TABLE_B ON TABLE_A.DOC_ID = TABLE_B.DOC_ID
WHERE TABLE_A.STATUS IN (0, 1)
将*替换为要显示的列。
在ORDERBY子句中包括ISNULLName,除非您不希望顶部有任何匹配项
CREATE VIEW [dbo].[V_MY_VIEW] AS
SELECT a.DOC_ID, a1.VALUE AS A, a2.VALUE AS B, a3.VALUE AS C
FROM dbo.TABLE_A a
LEFT JOIN (SELECT DOC_ID, VALUE FROM dbo.TABLE_B WHERE NAME = 'A') a1
ON a.DOC_ID = a1.DOC_ID
LEFT OUTER JOIN ( SELECT DOC_ID, VALUE FROM dbo.TABLE_B WHERE NAME = 'B') a2
ON a.DOC_ID = a2.DOC_ID
LEFT OUTER JOIN ( SELECT DOC_ID, VALUE FROM dbo.TABLE_B WHERE NAME = 'C') a3
ON a.DOC_ID = a3.DOC_ID
WHERE a.STATUS IN (0, 1)
查看Oops的结果,等等,只需完整阅读您的完整创建脚本,将在一分钟内更新,仍然看不到我在那里编写的select语句没有提供的内容,如果不是您想要的,请告诉我。看起来不错。我现在得到了我期望得到的所有行。谢谢