2013-10-12 56 views
0

我有一個長的代碼創建財務會計數據。代碼使用多個聯合將數據分組到不同的公司分組。如何聲明數據字符串

有5-6個多次參考的賬戶分組。

任何時候對分組進行更改時,我必須通過代碼並在每個位置對其進行更改。

字符串的下面是一個例子:

Where account in ('81000', '82000','87000','83600','67000') 
and account like '814%' 

反正有沒有把這個在聲明或只是內部鏈接到該代碼在其他地方陳述?

+2

'如果賬戶( '81000', '82000', '87000', '83600', '67000')和帳戶像 '814%''永遠不會匹配任何東西,應該說是'或' ?無論如何,您爲什麼不將帳戶組添加到帳戶表中? –

+1

根據設置,您可以爲分組創建一個「搜索表」,然後使用子查詢。否則,你將需要使用動態sql和某種形式的查找... –

+0

是的,它應該是一個或對不起。 – user2874197

回答

1

有幾種方法可以做你所描述的,最好的取決於你的確切需求。

首先也是最簡單的是使用變量。

declare @account1 int; set @account1 = 81000; 
declare @account2 int; set @account2 = 82000; 
declare @account3 int; set @account3 = 87000; /* and so forth*/ 

這不是從你的問題清楚這是否正在從前端應用程序調用,如果是,你可以使用SQL參數來設置帳戶值。其次,您可以將這些值放入臨時表或表變量中。

declare @accountIds table (account int); 
insert into @accountIds values(81000); 

select columnlist from accounts where account in (select account from @accounts); 

最後,如果這是多次執行的相同表達式,則可以考慮使用公用表表達式。

;using cte as (select columnlist from accounts where account in (81000, 87000) 
) 
select columnlist from cte inner join table2 on a=b 
union 
select columnlist from cte inner join table3 on a=c