SQL从2列中选择数据,如果数据不为NULL,则插入视图
我有一个从多个表中提取数据的视图。在视图的一列中,我需要插入一个帐户代码,该帐户代码可以在其中一个表的贷方或借方列下找到。如果借方栏中有账户代码,则贷方栏中不会有账户代码,反之亦然。基本上,我需要插入帐户代码,如果它被发现在任何列 由于联合,我无法更改视图列 也许我在用错误的关键字搜索这些信息,但我似乎找不到我需要的 谢谢 用查询更新SQL从2列中选择数据,如果数据不为NULL,则插入视图,sql,sql-server,join,view,null,Sql,Sql Server,Join,View,Null,我有一个从多个表中提取数据的视图。在视图的一列中,我需要插入一个帐户代码,该帐户代码可以在其中一个表的贷方或借方列下找到。如果借方栏中有账户代码,则贷方栏中不会有账户代码,反之亦然。基本上,我需要插入帐户代码,如果它被发现在任何列 由于联合,我无法更改视图列 也许我在用错误的关键字搜索这些信息,但我似乎找不到我需要的 谢谢 用查询更新 SELECT DET_YEAR as [Year], DET_PERIODNUMBR as [Period], DET_TYPE AS [Type], '
SELECT
DET_YEAR as [Year],
DET_PERIODNUMBR as [Period],
DET_TYPE AS [Type],
'' AS [Status],
DET_Date AS [Tran Date],
'' AS [Supplier],
'' AS [Supplier Name],
DET_DESCRIPTION as [Description],
DET_DIMENSION3 AS [Department],
'' as [Entry Type],
'' as [Detail],
DET_GROSS as [Value],
DET_COSTHEADER as [Project Code],
CH_NAME as [Project Name],
DET_COSTCENTRE AS [Project Cost Centre],
'' AS [Analysis Code],
'' AS [Analysis Name],
'' AS [Nominal Code],
'' AS [Account Name],
DET_NOMINALDR as [DebitNominal],
DET_NOMINALCR AS [CreditNominal],
NNAME as [Dr/CrNominalName],
'' AS POH_ORDER_NUMBR,
DET_BATCH_REF
FROM SL_PL_NL_DETAIL WITH (NOLOCK)
LEFT JOIN CST_COSTHEADER WITH (NOLOCK) ON DET_COSTHEADER = CH_CODE
LEFT JOIN CST_COSTCENTRE WITH (NOLOCK) ON DET_COSTCENTRE = CC_CODE AND DET_COSTHEADER = CC_COPYHEADER
INNER JOIN NL_ACCOUNTS WITH (NOLOCK) ON (DET_NOMINALDR = NCODE OR DET_NOMINALCR = NCODE)
WHERE DET_TYPE IN ('JNL', 'VJL') AND DET_BATCH_FLAG = 0 AND DET_YEAR IN ('C', 'N'))
您可以使用CASE语句-不必查看表,我只是猜测,但您可以这样做:
SELECT ....,
CASE WHEN credit IS NOT NULL THEN credit ELSE debit END AS account_code,
-- (etc)
当然,如果列不为null,您可以根据需要使用任何其他条件。如果我理解正确,您可以使用ISNULL或COALESCE,如下所示
ISNULL(a.column, b.column)
OR
COALESCE(a.column, b.column....)
--We can define multiple columns but it will return first NOT NULL value
看看这个例子:
CREATE TABLE #testOne(id int identity(1,1),
accountDebit varchar(50), accountCredit varchar(50))
insert into #testOne values
(null, '1222-1020')
select * from #testOne
id accountDebit accountCredit
1 NULL 1222-1020
select id,
isnull(accountDebit, accountCredit) AS account_code
from #testOne
输出
id account_code
1 1222-1020
您使用的是哪种dbms?能否向我们展示表结构或相关列子集(如果它们较大)以及您尝试过的内容?我正在使用MSSQL向我们展示一些基本表示例数据、视图定义以及当前和想要的结果。我需要将DET_NOMINALDR或DET_NOMINALCR放入标称代码中,当前结果分布在两列中。ISNULLDET_NOMINALDR,DET_NOMINALCR作为[名义代码]不起作用仅借方被添加到名义代码借方列中有什么值?如果存在0,则您必须将其用作ISNULLNULLIFdebit、0、NULLIFcredit、0或检查空白ISNULLNULLIFdebit、NULLIFcredit,我可能会遇到问题,因为它们是字符串格式,如“1222-1020”。我已使用示例更新了我的答案,请查看并尝试执行相应操作。如果您的列包含0或空白,请使用NULLIF.CASE检查。如果DET_NOMINALDR不为空,则DET_NOMINALDR ELSE DET_NOMINALDR END AS[标称代码],与其他建议的问题不一样。CR和DR列可以为空吗?如果没有,那么您需要使用其他条件来测试它们。如果您想要的帐户代码不存在,它们中会显示什么?我可能会有问题,因为它们是字符串格式的,如“1222-1020”,这很好,但是当帐户代码不存在时,这两列中会显示什么例如,当帐户代码在CR列中时,DR列中有什么?如果CR中有帐户,则DR iis为空或空