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,您好,我现在有一个ID列和一个金额列。 如果金额为正,则值表示为借方。如果金额为负数,则为信用证。我想知道如何拆分我的金额栏 Select * from Test.dbo.Accounts 产生 ID | Amount 1 | 500 2 | -600 第一项是借方,第二项是贷方。我想查询数据库,使其显示如下 ID | Debit | Credit 1 | 500 | null 2 | null |-600 您可以使用case语句查找金额所属的列: S

您好,我现在有一个ID列和一个金额列。 如果金额为正,则值表示为借方。如果金额为负数,则为信用证。我想知道如何拆分我的金额栏

Select * from Test.dbo.Accounts
产生

ID  | Amount
 1  |   500
 2  |  -600
第一项是借方,第二项是贷方。我想查询数据库,使其显示如下

ID  | Debit  | Credit
 1  | 500    | null
 2  | null   |-600

您可以使用case语句查找金额所属的列:

SELECT  id ,
        CASE WHEN amount >= 0 THEN amount
             ELSE NULL
        END AS debit ,
        CASE WHEN amount < 0 THEN amount
             ELSE NULL
        END AS credit
FROM    Test.dbo.Accounts

我假设0应该记入借方,但这是您的决定。

您可以使用案例说明查找金额属于哪一列:

SELECT  id ,
        CASE WHEN amount >= 0 THEN amount
             ELSE NULL
        END AS debit ,
        CASE WHEN amount < 0 THEN amount
             ELSE NULL
        END AS credit
FROM    Test.dbo.Accounts
Select ID, Amount as Debit, null as Credit
From Account
Where Amount >= 0

Union All

Select ID, null as Debit, Amount as Credit
From Account
Where Amount < 0

我认为0应该记入借方,但这是您的决定。

修复where中列的名称,我认为最好在不使用强制转换的情况下使用它,并将“null”替换为null。老实说,我有点迂腐,我不喜欢看到结果中的值为空!在where中修复列的名称,我认为最好不用强制转换就使用它,并用null替换“null”。老实说,我有点迂腐,我不喜欢看到结果中的值为空!
Select ID, Amount as Debit, null as Credit
From Account
Where Amount >= 0

Union All

Select ID, null as Debit, Amount as Credit
From Account
Where Amount < 0