0

case文でselectクエリを書く方法を教えてください。

select
ROW_NUMBER() OVER(Order by vendor.VendorName ) AS ID,
PH.PurchasingHeaderID as BILLNo,
PH.TotalPriceCompanyCurrency as Balance,
acc.AccountName as [Account_Name]  
**Into #tempOpenVedorlist** 
from PurchasingHeader PH
LEFT OUTER JOIN TransactionType Trans ON PH.TransactionTypeID =Trans.TransactionTypeID
LEFT OUTER JOIN Vendor vendor on PH.VendorID=vendor.VendorID
LEFT OUTER JOIN PaymentTerm PT on PT.PaymentTermID = vendor.PaymentTermID
LEFT OUTER JOIN PurchasingDetail PD on PD.PurchasingHeaderID = PH.PurchasingHeaderI
LEFT OUTER JOIN Account Acc on Acc.AccountID= PD.FinancialAccountID 
where PH.TransactionTypeID=7
Group by vendor.VendorName,
PH.PurchasingHeaderID,PH.TotalPriceCompanyCurrency,acc.AccountName

私はこの結果を得ました:

この結果: ここに No : VB1003 が 2 回ありますが、アカウント名が異なります。

ID      BILLNo          Account_Name            Balance   
-------------------------------------------------------------
 101      VB1000        Cash-Petty Cash         4000.00  
 102     VB1001        Accounts Receivable      5000.00 
 103    VB1003       Cash-PettyCash             6000.00 
 104     VB1003       Cash                      6000.00  
 105    VB1004        UndepositedFunds          7000.00  

ここで私は見せなければなりません;

この結果が必要です:

ID      BILLNo        Account_Name          Balance    
------------------------------------------------------
 101      VB1000      Cash-PettyCash        4000.00  
 102      VB1001      AccountsReceivable     5000.00  
 103     VB1003      ---Multiple----        6000.00  
 104     VB1004      UndepositedFunds      7000.00   

私がやったことの結果について:私は一時テーブルのすべてのデータを取得しました。

複数の番号を持つ複数の文字列を表示できます。

残念ながら、BILLNo が 1 つしかない Account Name を表示することはできません。

select ROW_NUMBER() OVER(Order by BILLNo ) AS ID,
[BILLNo],
Balance,
 CASE
 WHEN count(BILLNo)>1 THEN 'Multipul'
 WHEN count(BILLNo)<2 THEN **(Select Account_Name from #tempOpenVedorlist )** 
 End As [Financial_Account] 
from #tempOpenVedorlist
Group By BILLNo,Balance

そのBILLNoに関連する一時テーブルからアカウント名を取得する方法を教えてください。

4

1 に答える 1

2

AccountNameから を取り外し、GROUP BYその上に骨材を置きます。

SELECT  ROW_NUMBER() OVER(Order by vendor.VendorName ) AS ID,
        PH.PurchasingHeaderID as BILLNo,
        PH.TotalPriceCompanyCurrency as Balance,
        CASE WHEN MIN(acc.AccountName) IS NULL
             THEN '----'
             WHEN MIN(acc.AccountName) = MAX(acc.AccountName)
             THEN MIN(acc.AccountName) 
             ELSE '--MULTIPLE--' 
        END  as [Account_Name]  
INTO    #tempOpenVedorlist
FROM    PurchasingHeader PH
        LEFT OUTER JOIN TransactionType Trans 
            ON PH.TransactionTypeID =Trans.TransactionTypeID
        LEFT OUTER JOIN Vendor vendor 
            ON PH.VendorID=vendor.VendorID
        LEFT OUTER JOIN PaymentTerm PT 
            ON PT.PaymentTermID = vendor.PaymentTermID
        LEFT OUTER JOIN PurchasingDetail PD 
            ON PD.PurchasingHeaderID = PH.PurchasingHeaderI
        LEFT OUTER JOIN Account Acc 
            ON Acc.AccountID= PD.FinancialAccountID 
WHERE   PH.TransactionTypeID=7
GROUP BY  vendor.VendorName,
        PH.PurchasingHeaderID,
        PH.TotalPriceCompanyCurrency
于 2013-10-01T07:36:13.063 に答える