0

複数のタイプ (タイプ 1 : xxxxxx、yyyyyy およびタイプ 2: aaaaa、bbbbb) が同じ num に関連付けられている可能性があるシナリオがあります (条件が同じユーザー名の場合)

同じ num と p_id を持つ同じユーザー名に複数のタイプが存在する可能性があることを意味します。ここで、pk 1 と pk 2 の値 1,2,3,4,5 を組み合わせる必要があります (図 1)。およびタイプ 2: aaaaa) 両方の主キー

これらの値は max(pk) と組み合わせる必要があります。つまり、図 1 のように pk =2 です。

次に、結果セットは図 2 のようになります。値を結合した後、テーブル名から pk 1 を削除する必要があります。 .

誰かがこれで私を助けてくれませんか。私は本当にあなたの助けに感謝します

Pk  num    P_id   year   Value value value  value value  type    type    username
                          1      2     3     4     5     1        2

1  123456  4567   2012    $2     $5     0     0 0    xxxxx   aaaaa     mr.nice
2  123456  4567   2012    $1     $5     $2    0  0    xxxxx   aaaaa     mr.nice
3  123456  4567   2012     0     $2     0     0   0    yyyyy    bbbbb     mr.nice
Fig 1: Table name: values


Pk  num    P_id   year  Value value value  value   value  type   type    username
                          1      2     3     4       5     1      2

2  123456  4567   2012    $3   $10     $2    0   0       xxxxx   aaaaa    mr.nice
3  123456  4567   2012    $0     2      0    0     0       yyyyy   bbbbb    mr.nice

図 2: テーブル名: 値の結果セット - 値を結合した後

4

2 に答える 2

0

GROUP BY 句を使用して値を結合します。この句を使用する場合は、集計関数 (MAX、SUM など) を使用する必要があります。問題に使用する例を次に示します。

SELECT MAX(Pk),
    num,
    P_id,
    year,
    SUM(Value1),
    SUM(value2),
    SUM(value3),
    SUM(value4),
    SUM(value5),
    type1,
    type2,
    username
FROM YourTable
GROUP BY 
    num,
    P_id,
    year,
    type1,
    type2,
    username
于 2013-03-28T00:48:40.127 に答える
0

すべてのフィールドを使用しているわけではありませんが、次の例で要点を理解できます。

@Fig1 は、やりたいこととほぼ同じ一時テーブルです。重要な値をそこに挿入します。

declare @fig1 table  ( PK int, val1 money, val2 money, vtype varchar(5), vtype2 varchar(5)  )
declare @uPK table ( PK int)

insert into @fig1 values
(1, 2, 5, 'xxxxx', 'aaaaa'),
(2, 1, 5, 'xxxxx', 'aaaaa'),
(3, 0, 2, 'yyyyy', 'bbbbb');

ここから魔法が始まります。共通のテーブル式を使用して、フィールドの新しい値がどうあるべきかを計算し、その場で新しいテーブルに名前を付けます。

WITH Updates 
AS (
select 
    max(PK) as PK,
    sum(val1) as Val1,
    sum(val2) as Val2
from @fig1
group by vtype, vtype2)

次に、この新しい集計テーブルに基づいて値を更新し、OUTPUT キーワードを使用して更新された値を通知し、それらの値を一時変数 @uPK にプッシュします。

Update f
    set val1=U.Val1, val2=U.val2
OUTPUT INSERTED.PK into @uPK
from Updates U 
inner join @fig1 f on U.pk=f.pk;

残すべきものがわかったら、残すべきでないものを単純に削除します。また、この削除では、更新された型に一致するものだけを削除したい場合がありますが、基本的な T-SQL ではこの道をたどることができます。

delete f
from @fig1 f
left outer join @uPK p on f.PK=p.PK
where p.PK is null

select * from @fig1
于 2013-03-28T00:54:29.110 に答える