サブ選択結果に基づくT-SQLの更新値

MS SQL 2008の使用とストアドプロシージャが必要です。

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

これまでのところ私はこれを持っていますが、間違っている可能性が最も高いです:

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;

EDIT

サンプルデータ(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

2
bool/bit ではない列 Isdouble の名前を付けていますか?
追加された 著者 Tim Schmelter,
更新ステートメント自体に WHERE を使用することができます
追加された 著者 Bulat,
あなたはそのようなクエリでサンプルデータを与える必要があります
追加された 著者 Justin,
それはブール/ビットではない、それはncharです、私はサンプルデータを追加します
追加された 著者 user1371966,
ここにサンプルデータがあります:
追加された 著者 user1371966,

2 答え

クエリ:

SQLFIDDLEEXAmple

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 |
2
追加された
みんなありがとう!
追加された 著者 user1371966,

私はあなたが必要と思う

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
0
追加された