2013-10-01 5 views
0

Дайте мне знать, как написать select query в case statement.как написать инструкцию 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 

Я получил этот результат:

с этим результатом: Здесь У меня нет: VB1003 два раза, но имя учетной записи отличается.

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 

Для aboue результата, что я сделал: я взял все данные в таблице Темп.

Am смог показать несколько строк, для которых имеет более одного No.

Но несчастливо я не смог показать имя учетной записи, для которых есть только один BILLNo.

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.

ответ

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 
+0

Если я удалить имя учетной записи из группы по, я получаю ошибки типа: Колонка «Account.AccountName» недопустим в списке выбора, поскольку он не содержится ни в статистической функции или предложения GROUP BY. – Kavitha

+1

Думаю, вам понадобится 'MIN()' в 'THEN', так как в этой точке все еще есть несколько строк. –

+0

Проверьте, пожалуйста. Я вложил все в MAX, поэтому он должен работать. –

Смежные вопросы