2011-09-13 27 views
0

SQL和新的任何幫助將受到歡迎。案例查詢不起作用

任何人都可以建議創建以下查詢的最佳方法。

_hs_eb_code1 = 'bf', then set format = _hs_eb_det1 
    _hs_eb_code# = 'bf', then set format = _hs_eb_det# 

Repeat until _hs_eb_code# (1-9), 

然而如果_hs_eb_det1字符長度超過100個字符,然後用'*'前綴。另外_hs_eb_code1 ='bf'是一個,而_hs_eb_det1將提供許多結果。

到目前爲止,我可以使用大小寫查詢來檢查第一部分,然後構建另一個查詢。我迷路了。

查詢:

SELECT CASE 
    WHEN LEN(FORMAT) < 100 THEN LEFT(FORMAT,100) 
    ELSE '*'+FORMAT 
END AS FORMAT 
FROM (SELECT CASE 

      WHEN EXISTS (SELECT _HS_EB_CODE1 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE1 = 'BF') THEN _HS_EB_DET1 
     WHEN EXISTS (SELECT _HS_EB_CODE2 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE2 = 'BF') THEN _HS_EB_DET2 
      WHEN EXISTS (SELECT _HS_EB_CODE3 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE3 = 'BF') THEN _HS_EB_DET3  
      WHEN EXISTS (SELECT _HS_EB_CODE4 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE4 = 'BF') THEN _HS_EB_DET4 
      WHEN EXISTS (SELECT _HS_EB_CODE5 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE5 = 'BF') THEN _HS_EB_DET5 
      WHEN EXISTS (SELECT _HS_EB_CODE6 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE6 = 'BF') THEN _HS_EB_DET6 
      WHEN EXISTS (SELECT _HS_EB_CODE7 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE7 = 'BF') THEN _HS_EB_DET7 
      WHEN EXISTS (SELECT _HS_EB_CODE8 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE8 = 'BF') THEN _HS_EB_DET8 
      WHEN EXISTS (SELECT _HS_EB_CODE9 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE9 = 'BF') THEN _HS_EB_DET9 
END) AS FORMAT 
    FROM DBO.SRC_TBM_BILLGRP 

但是我有一個問題,即查詢有一對多,因此無法工作。 WHEN EXISTS(SELECT _HS_EB_CODE1 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE1 = 'BF')THEN _HS_EB_DET1

回答

2
select case when len(format) > 100 then left(format, 100) + '*' else format end as format from 
(select case 'bf' when _hs_eb_code1 then _hs_eb_det1 
       when _hs_eb_code2 then _hs_eb_det2 
       when _hs_eb_code3 then _hs_eb_det3 
       when _hs_eb_code4 then _hs_eb_det4 
       when _hs_eb_code5 then _hs_eb_det5 
       when _hs_eb_code6 then _hs_eb_det6 
       when _hs_eb_code7 then _hs_eb_det7 
       when _hs_eb_code8 then _hs_eb_det8 
       when _hs_eb_code9 then _hs_eb_det9 
       end) as format 
    from <yourtable>) a 
+0

謝謝您的幫助,已經拿到的情況下位向下。問題在於下一位 - 如果_hs_eb_det#超過100個字符長度,則以'*'作爲前綴。不確定如何創建查詢 – Nobody

+0

查詢的第二部分是問題:SELECT CASE \t \t WHEN EXISTS(SELECT _HS_EB_CODE1 FROM DBO.SRC_HBL_CLNT_CAT WHERE _HS_EB_CODE1 = 'BF')THEN (SELECT _HS_EB_DET1 FROM DBO.SRC_TBM_BILLGRP WHERE _HS_EB_DET1 IS NOT NULL AND _HS_EB_DET1 <>'') \t END FROM DBO.SRC_TBM_BILLGRP。我需要一個多對多的指定,因爲該存在僅適用於1到1. – Nobody

+0

@PeleO我很抱歉,我不明白這一點代碼的問題。 –