Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 我需要在数据库中创建一个视图_Sql_Sql Server - Fatal编程技术网

Sql 我需要在数据库中创建一个视图

Sql 我需要在数据库中创建一个视图,sql,sql-server,Sql,Sql Server,当两列引用同一个表时,我需要在数据库中创建一个视图。我可以创建如下视图: CREATE VIEW [dbo].[ViewJournal] AS SELECT J. d, J.date, J.drac, L.name as draccount, J.crac, L.name as craccount, J.dramt, J.cramt, J.lf, J.description, J.voucherType, J.reg_date, J.l

当两列引用同一个表时,我需要在数据库中创建一个视图。我可以创建如下视图:

CREATE VIEW [dbo].[ViewJournal]
AS 
    SELECT 
        J. d, J.date, J.drac, L.name as draccount, J.crac,
        L.name as craccount, J.dramt, J.cramt, J.lf,
        J.description, J.voucherType, J.reg_date, J.last_update,
        J.active 
    FROM 
        Journal J, Ledger L 
    WHERE 
        J.drac = L.Id
但结果并没有显示实际结果

这里,
crac
drac
是从
分类账
表中引用的

日记账
表:

CREATE TABLE [dbo].[Journal] 
(
   [Id]             DECIMAL (18)    IDENTITY (1, 1) NOT NULL,
   [date]           DATETIME        NULL,
   [drac]           DECIMAL (18)    NULL,
   [crac]           DECIMAL (18)    NULL,
   [dramt]          DECIMAL (18, 2) NULL,
   [cramt]          DECIMAL (18, 2) NULL,
   [reg_date]       DATETIME        NULL,
   [last_update]    DATETIME        NULL,
   [active]         INT             NULL,
   [lf]             VARCHAR (50)    NULL,
   [description]    NVARCHAR (150)  NULL,
   [voucherType]    VARCHAR (50)    NULL,
   [sales]          VARCHAR (50)    NULL,
   [purchase]       VARCHAR (50)    NULL,
   [cash_paymentno] VARCHAR (50)    NULL,
   [cash_receiptno] VARCHAR (50)    NULL,
   [expense]        VARCHAR (50)    NULL,
   [income]         VARCHAR (50)    NULL,
   [advance]        VARCHAR (50)    NULL,
   [remunaration]   VARCHAR (50)    NULL,

   CONSTRAINT [PK_Journal] PRIMARY KEY CLUSTERED ([Id] ASC),
   CONSTRAINT [FK_Ledger] FOREIGN KEY ([drac]) REFERENCES [dbo].[Ledger] ([Id]) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE [dbo].[Ledger] 
(
    [Id]             DECIMAL (18)  IDENTITY (1, 1) NOT NULL,
    [name]           NVARCHAR (50) NULL,
    [type]           NVARCHAR (50) NULL,
    [classification] VARCHAR (50)  NULL,
    [realornominal]  VARCHAR (50)  NULL,
    [reg_date]       DATETIME      NULL,
    [last_update]    DATETIME      NULL,
    [active]         DECIMAL (2)   NULL,
    [depree]         VARCHAR (50)  NULL,

    CONSTRAINT [PK_Ledger] PRIMARY KEY CLUSTERED ([Id] ASC)
);
分类账
表格:

CREATE TABLE [dbo].[Journal] 
(
   [Id]             DECIMAL (18)    IDENTITY (1, 1) NOT NULL,
   [date]           DATETIME        NULL,
   [drac]           DECIMAL (18)    NULL,
   [crac]           DECIMAL (18)    NULL,
   [dramt]          DECIMAL (18, 2) NULL,
   [cramt]          DECIMAL (18, 2) NULL,
   [reg_date]       DATETIME        NULL,
   [last_update]    DATETIME        NULL,
   [active]         INT             NULL,
   [lf]             VARCHAR (50)    NULL,
   [description]    NVARCHAR (150)  NULL,
   [voucherType]    VARCHAR (50)    NULL,
   [sales]          VARCHAR (50)    NULL,
   [purchase]       VARCHAR (50)    NULL,
   [cash_paymentno] VARCHAR (50)    NULL,
   [cash_receiptno] VARCHAR (50)    NULL,
   [expense]        VARCHAR (50)    NULL,
   [income]         VARCHAR (50)    NULL,
   [advance]        VARCHAR (50)    NULL,
   [remunaration]   VARCHAR (50)    NULL,

   CONSTRAINT [PK_Journal] PRIMARY KEY CLUSTERED ([Id] ASC),
   CONSTRAINT [FK_Ledger] FOREIGN KEY ([drac]) REFERENCES [dbo].[Ledger] ([Id]) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE [dbo].[Ledger] 
(
    [Id]             DECIMAL (18)  IDENTITY (1, 1) NOT NULL,
    [name]           NVARCHAR (50) NULL,
    [type]           NVARCHAR (50) NULL,
    [classification] VARCHAR (50)  NULL,
    [realornominal]  VARCHAR (50)  NULL,
    [reg_date]       DATETIME      NULL,
    [last_update]    DATETIME      NULL,
    [active]         DECIMAL (2)   NULL,
    [depree]         VARCHAR (50)  NULL,

    CONSTRAINT [PK_Ledger] PRIMARY KEY CLUSTERED ([Id] ASC)
);

在当前查询中,您加入的是
J.drac=L.Id
,这意味着
L
将始终是
J.drac
中引用的记录,而不管
J.crac
的值如何

按照我的理解,您希望引用
分类账
表中的两条不同记录。你需要两个连接

SELECT 
    J.Id, J.date, J.drac, D.name as draccount, J.crac,
    C.name as craccount, J.dramt, J.cramt, J.lf,
    J.description, J.voucherType, J.reg_date, J.last_update,
    J.active 
FROM Journal J
INNER JOIN Ledger D ON J.drac = D.Id
INNER JOIN Ledger C ON J.crac = C.Id

当同一个查询不在视图中时,它是否工作?您是否收到异常,或者仅仅是结果不是您所期望的结果?您从
分类账
表中选择的唯一字段是
名称
,您要抓取该字段两次。这是故意的吗?6 11/20/2015 12:00:00 AM 6销售账户7销售账户200.00 200.00日记帐11/20/2015 11:09:33 AM 11/20/2015 11:09:33 AM 17 11/20/2015 12:00:00 AM 8现金账户6现金账户200.00 200.00日记帐11/20/2015 11:24:51 AM 11/20 11:24:51 AM 1-旧样式逗号分隔的表格列表样式被替换为ANSI-92 SQL标准(20多年前)中正确的ANSI
JOIN
语法及其使用不受欢迎,这是因为您正在为两个字段选择
Ledger.name
L.name作为draccount,…,L.name作为craccount