1

假设我们有来自表 invoice_details 的 4 列

Customer Order ||   invoice number.    ||   Work Order     ||    Invoice Amount
    O2911               9011                   20113                  5000
    O2911               9012                   20114                  6000
    O2912               9012                   20114                  6000
    O2913               9013                   20115                  7000
    O2914               9014                   20116                  6000

输出应该像

Customer Order ||   invoice number.    ||   Work Order     ||    Invoice Amount
    O2911         9011        20113        5000
    O2911         9012        20114        6000
    O2912         9012        20114          -
    O2913         9013        20115        7000
    O2914         9014        20116        6000

由于发票编号(9012)重复,其发票金额也是(即6000),所以我只想要发票编号的第一张发票金额,其余的都应该为空,如上所示。

4

1 回答 1

1

如果您的 RDBMS 可以支持窗口函数,这可能很容易,

SELECT  "CustomerOrder", 
        "Invoicenumber", 
        "WorkOrder", 
        CASE WHEN rn = 1 
             THEN CAST("InvoiceAmount" AS VARCHAR(20))
             ELSE '-'
        END "InvoiceAmount"
FROM
        (
            SELECT  "CustomerOrder", "Invoicenumber", "WorkOrder", 
                    "InvoiceAmount",
                    ROW_NUMBER() OVER (PARTITION BY "Invoicenumber" 
                                        ORDER BY "CustomerOrder") rn
            FROM    TableName
        ) 

输出

╔═══════════════╦═══════════════╦═══════════╦═══════════════╗
║ CUSTOMERORDER ║ INVOICENUMBER ║ WORKORDER ║ INVOICEAMOUNT ║
╠═══════════════╬═══════════════╬═══════════╬═══════════════╣
║ O2911         ║          9011 ║     20113 ║ 5000          ║
║ O2911         ║          9012 ║     20114 ║ 6000          ║
║ O2912         ║          9012 ║     20114 ║ -             ║
║ O2913         ║          9013 ║     20115 ║ 7000          ║
║ O2914         ║          9014 ║     20116 ║ 6000          ║
╚═══════════════╩═══════════════╩═══════════╩═══════════════╝
于 2013-05-30T15:08:36.977 回答