我有一个这样的表#A
:
id | main_value | value1 | Value2 | value3 | value4
------------------------------------------------------------
1 | VALUE1 | 1.00 | 0.00 | 0.00 | 2.00
2 | VALUE2 | 0.00 | 4.00 | 0.00 | 0.00
3 | VALUE4 | 0.00 | 0.00 | 1.00 | 5.00
4 | VALUE3 | 1.00 | 0.00 | 2.00 | 0.00
每次仅在表中插入两个值(value1,value2,value3,value4中只有两列)
我只想根据主值选择两个值。
如果我的主要值是value1
,则1st
列的值是values1
,而2nd
列的值是另一个非零的列。
如果我的主要值是value2
,则1st
列的值是values2
,而2nd
列的值是另一个非零的列。
样本数据:
CREATE TABLE #A (id int,
main_value Nvarchar(MAX),
value1 DECIMAL(15,2),
Value2 DECIMAL(15,2),
value3 DECIMAL(15,2),
value4 DECIMAL(15,2))
INSERT INTO #A VALUES(1, 'VALUE1',1,0,0,2 )
INSERT INTO #A VALUES(2, 'VALUE2',0,4,0,0 )
INSERT INTO #A VALUES(3, 'VALUE4',0,0,1,5 )
INSERT INTO #A VALUES(4, 'VALUE3',1,0,2,0 )
SELECT * FROM #A
预期结果:
id | main_value | 1st | 2nd |
--------------------------------------
1 | VALUE1 | 1.00 | 2.00 |
2 | VALUE2 | 4.00 | 1.00 |
3 | VALUE4 | 5.00 | 1.00 |
4 | VALUE3 | 2.00 | 1.00 |
答案 0 :(得分:2)
请在以下情况下尝试使用情况
select id, main_value,
case
when main_value='VALUE1' then value1
when main_value='VALUE2' then value2
when main_value='VALUE4' then value4
when main_value='VALUE3' then value3
end as 1st,
case
when main_value='VALUE1' then value2+value3+value4
when main_value='VALUE2' then value1+value3+value4
when main_value='VALUE4' then value1+value2+value3
when main_value='VALUE3' then value1+value2+value4
end as 2nd
from tablename
答案 1 :(得分:2)
我不确定您使用的是哪个数据库,无论如何对于SQL Server此类解决方案都应该起作用:
SELECT id,
main_value,
COALESCE(NULLIF(value1,0)
,NULLIF(value2,0)
,NULLIF(value3,0)
,NULLIF(value4,0)) as Value1
, COALESCE(NULLIF(value4,0)
,NULLIF(value3,0)
,NULLIF(value2,0)
,NULLIF(value1,0)) as Value2
FROM #A
如果数据库中有null而不是0,则不需要nullif函数。希望对您有所帮助。
答案 2 :(得分:0)
您需要类似的东西吗? (可以改进)
create table ABC.t1 (
c1 NUMBER GENERATED ALWAYS as IDENTITY ( START with 1 INCREMENT by 1 ),
c2 VARCHAR2(10)
)
答案 3 :(得分:0)
您可以使用case
来代替编写两次cross apply
表达式:
SELECT id, main_value, [1st],
value1 + value2 + value3 + value4 - [1st] As [2nd]
FROM #A
CROSS APPLY
(
SELECT
CASE main_value
WHEN 'VALUE1' THEN value1
WHEN 'VALUE2' THEN value2
WHEN 'VALUE3' THEN value3
WHEN 'VALUE4' THEN value4
END As [1st]
) X