Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server创建排序视图_Sql_Sql Server - Fatal编程技术网

SQL Server创建排序视图

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上的外键 然

我有一个具有以下结构的数据库表:

表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上的外键

然后我创建一个视图,这样我就可以更容易地按名称排序

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语句没有提供的内容,如果不是您想要的,请告诉我。看起来不错。我现在得到了我期望得到的所有行。谢谢