2

需要使用 MS SQL 2008 和存储过程。

因此,在我的表中,我有某些行 IsDouble 值为 2。现在,如果字符串计数(从 4 列连接)大于 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;

编辑

这是示例数据(发票类型、发票编号、发票日期、供应商代码):

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 之后,第三行应该是 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 回答