2

MS SQL 2008 を使用しており、ストアド プロシージャが必要です。

したがって、私のテーブルには、IsDouble 値が 2 になる特定の行があります。文字列の数 (4 列から連結) が 1 より大きい場合、最初の選択から行ごとに IsDouble を 2 から 1 に更新する必要があります。文字列のカウントは 1 から 0 です

これまでのところ私はこれを持っていますが、おそらく間違っています:

select * from TestInvoiceData where Isdouble='2';
update TestInvoiceData
set testinvoicedata.Isdouble=
case 
    when  
    (
        select COUNT (InvoiceDate+InvoiceNumber+VendorCode+Invoicetype) 
        from      TestInvoiceData
     ) >1 then 1
     else 0
end;

編集

サンプル データ (invoicetype、invoicenumber、invoicedate、vendorcode) は次のとおりです。

INVO    322760-262  2012-05-10  0000081964  2
INVO    322760-262  2012-05-10  0000081964  0
INVO    322756-262  2012-05-10  0000081964  2
INVO    7011200072  2012-05-10  0000046172  0
INVO    7011200071  2012-05-10  0000046172  0
INVO    7011200070  2012-05-10  0000046172  0
INVO    7011200069  2012-05-10  0000046172  0
INVO    7011200068  2012-05-10  0000046172  0
INVO    12106563    2012-04-24  0000010171  0
INVO    06649       2012-04-24  0000067987  0

この例に基づいて、最初の行は更新後 1 で、3 番目の行は 0 である必要があります

4

2 に答える 2

2

クエリ:

SQLFIDDLEEXサンプル

UPDATE TestInvoiceData
SET Isdouble = (
SELECT   CASE WHEN count(*)>1 THEN 1
         ELSE 0 END AS cnt
FROM TestInvoiceData t1
  WHERE t1.invoicetype =TestInvoiceData.invoicetype 
  AND   t1.invoicenumber = TestInvoiceData.invoicenumber
  AND   t1.invoicedate = TestInvoiceData.invoicedate
  AND   t1.vendorcode = TestInvoiceData.vendorcode
GROUP BY t1.invoicetype,
         t1.invoicenumber,
         t1.invoicedate,
         t1.vendorcode)
WHERE Isdouble = '2'

結果:

| INVOICETYPE | INVOICENUMBER |                  INVOICEDATE | VENDORCODE | ISDOUBLE |
--------------------------------------------------------------------------------------
|        INVO |    322760-262 |   May, 10 2012 00:00:00+0000 |      81964 |        1 |
|        INVO |    322760-262 |   May, 10 2012 00:00:00+0000 |      81964 |        0 |
|        INVO |    322756-262 |   May, 10 2012 00:00:00+0000 |      81964 |        0 |
|        INVO |    7011200072 |   May, 10 2012 00:00:00+0000 |      46172 |        0 |
|        INVO |    7011200071 |   May, 10 2012 00:00:00+0000 |      46172 |        0 |
|        INVO |    7011200070 |   May, 10 2012 00:00:00+0000 |      46172 |        0 |
|        INVO |    7011200069 |   May, 10 2012 00:00:00+0000 |      46172 |        0 |
|        INVO |    7011200068 |   May, 10 2012 00:00:00+0000 |      46172 |        0 |
|        INVO |      12106563 | April, 24 2012 00:00:00+0000 |      10171 |        0 |
|        INVO |         06649 | April, 24 2012 00:00:00+0000 |      67987 |        0 |
于 2013-02-07T12:28:10.707 に答える
0

私はあなたが必要だと思います

update TestInvoiceData set

Isdouble=CASE 
            WHEN (select count(*) from TestInvoiceData as Tid
                  where 
                  tId.InvoiceDate=InvoiceDate
                  AND
                  tId.InvoiceNumber=InvoiceNumber
                  AND
                  tId.VendorCode=VendorCode
                  AND
                  tId.Invoicetype =Invoicetype 
                 ) > 1
                 THEN 1
                 ELSE 0
             END

where Isdouble=2
于 2013-02-07T12:06:45.387 に答える