Sql server 2008 如何在case语句中编写select语句
让我知道如何在case语句中编写select查询Sql server 2008 如何在case语句中编写select语句,sql-server-2008,case,temp-tables,Sql Server 2008,Case,Temp Tables,让我知道如何在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
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
关于结果,我所做的是:我已经获取了temp表中的所有数据
我可以显示多个具有多个编号的字符串
但不幸的是,我无法显示只有一个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
选择(订单号)上方的行号()作为ID,
[比尔诺],
平衡,
案例
当计数(BILLNo)>1时,则为“多脉冲”
当计数(BILLNo)时,从分组依据中删除AccountName
,并对其进行聚合
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
如果我从Group by中删除帐户名,则会出现如下错误:“account.AccountName”列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在Group by子句中。我想您需要一个MIN()中的
,然后
,因为此时仍可能有多行。请立即检查。我将所有内容都包含在一个MAX中,因此它应该可以工作。无法对包含聚合或子查询的表达式执行聚合函数。
因此我将其改为我的建议。@Damien_不信者,jyparask感谢您的回复。如果帐户名为null会怎么样。我需要显示空值,其中BillNo的帐户名为空