2014-06-23 65 views
0

我無法包裹我圍繞着以下問題頭部,其與通用足夠的辦法,我可以處理日常用戶請求報告從促銷總銷售額做通過訂閱。 (甚至讓用戶獲得按需提供數據)TSQL:搜索每行多個字段對於一個給定的字符串值

我試圖寫一個SSRS報告會從一個文本參數,允許multipule值接受輸入的查詢。實施例(「代碼1,代碼2,CODE3」)... ,然後搜索所有四個出售「ID」字段中的例子見下表 - 返回每個[DocumentNo],[LineNo_]組合,其中所提供的代碼中的任何一個出現在任何一個ID字段。這四個字段不能爲空,但它們可以是空字符串。有多個代碼可以應用於訂單行,但每個字段只能有一個。每個[DocumentNo],[LineNo_]組合應該只有一次在輸出中出現,這樣我可以總結的[數量],並得到正確的總。

[DocumentNo] [varchar](20) NOT NULL 
[LineNo_] [int] NOT NULL 
[SalesDiscountReasonID] [varchar](20) NOT NULL 
[CouponID] [varchar](30) NOT NULL 
[CampaignID] [varchar](20) NOT NULL 
[PromotionCodeID] [varchar](20) NOT NULL 
[qty] [Int] NOT NULL 

我不能改變數據的內在張力結構在數據倉庫中,我不能指望誰經常詢問該報表的用戶跟蹤什麼類型的促銷優惠券的,運動,SalesDiscount,促銷碼來實施銷售,因爲他們沒有設置銷售或進行訂單的數據輸入。

回答

0

我認爲你可以做你想要什麼like

where (','[email protected]+',' like '%,'+SalesDiscountReasonID+',%' or 
     ','[email protected]+',' like '%,'+CouponID+',%' or 
     ','[email protected]+',' like '%,'+CampaignID+',%' or 
     ','[email protected]+',' like '%,'+PromotionCodeID+',%' 
    ) 

額外的逗號來避免10100之間,也就是說,混亂。

如果您正在構建SQL,它是非常,非常非常好做:

where SalesDiscountReasonID in (''' + replace(@Codes, ',', ''',''') + ''') or 
     CouponID in (''' + replace(@Codes, ',', ''',''') + ''') or 
     CampaignID in (''' + replace(@Codes, ',', ''',''') + ''') or 
     PromotionCodeID in (''' + replace(@Codes, ',', ''',''') + ''')' 

原因之一是in可以利用索引,因此可以執行好得多。

相關問題