0

以下のテーブルに関するクエリが必要です

テーブル

ClienName   Bal0    Bal1    Bal2        Bal3        Bal4        Bal5        Bal6    
--------------------------------------------------------------------------------
A           600     600     NULL        NULL        NULL        NULL        NULL    
B           Null    100     NULL        NULL        NULL        NULL        NULL    
C           NULL    NULL    200          NULL       NULL        NULL        NULL        
D           NULL    NULL    NULL        NULL        NULL        130         130     
E           510     510     NULL        510         510         NULL        NULL    
F           170     170     NULL        170         170         NULL        170 
G           210     210     NULL        210         210         210         210     
H           20      20      NULL        20          NULL        NULL        NULL    

結果: 上記の TABLE を以下のように表示したいのですが、どのクエリで実行できますか? 助けてください

ClienName   Bal0    Bal1    Bal2        Bal3        Bal4        Bal5        Bal6    
--------------------------------------------------------------------------------
A           600     600     600         600         600         600         600     
B           100     100     100         100         100         100         100     
C           200     200     200         200         200         200         200     
D           130     130     130         130         130         130         130         
E           510     510     510         510         510         510         510     
F           170     170     170         170         170         170         170 
G           210     210     210         210         210         210         210     
H           20      20      20          20          20          20          20
4

2 に答える 2

3

非常に限られた例セットからあなたが何を望んでいるかを私が理解していると仮定すると、表を調べて列ごとに記入してください.

順方向の 1 回のパス:

UPDATE theTable
SET Bal1 = Bal0
WHERE Bal1 IS NULL AND Bal0 IS NOT NULL;

UPDATE theTable
SET Bal2 = Bal1
WHERE Bal2 IS NULL AND Bal1 IS NOT NULL;

...

そして逆の1つのパス:

UPDATE theTable
SET Bal5 = Bal6
WHERE Bal5 IS NULL AND Bal6 IS NOT NULL;

UPDATE theTable
SET Bal4 = Bal5
WHERE Bal4 IS NULL AND Bal5 IS NOT NULL;

...

これも (「Bal」はバランスを意味し、数値は時間と関係があると仮定します)、時間の増加に伴って列の値が異なる場合を処理します。


代わりに、null 以外の最初の列だけが必要な場合は、次のCOALESCE演算子を試してください。

SELECT ClienName, COALESCE(Bal0, Bal1, Bal2, Bal3, Bal4, Bal5, Bal6) AS firstBal
FROM theTable
于 2012-11-05T18:11:12.023 に答える
0

maxのみをクエリし(行ごとに1つの値のみを想定)、既存のテーブルを更新しない場合は、これを行うことができます

declare @table table(clientname varchar(5), bal0 int, 
                    bal1 int, bal2 int, bal3 int, bal4 int, bal5 int, bal6 int)

insert into @table 
select 'A', 600, 600, null, 600, 600, null, null
UNION ALL
select 'B', null, 120, null, null, 120, null, null

;with cte as (
select clientname, (SELECT MAX(val) 
                    FROM (VALUES (bal0),(bal1),(bal2),(bal3),
                          (bal4),(bal5),(bal6)) AS value(val)) As mCOL
from @table 
)

select t.clientname, mCOL as bal0, mCOL as bal1, mCOL as bal2, mCOL as bal3, 
mCOL as bal4, mCOL as bal5, mCOL as bal6
from @table t inner join cte c on t.clientname = c.clientname 
于 2012-11-05T18:24:47.417 に答える