2011-09-13 5 views
0

SQL 입문 및 모든 도움을 환영 할 것입니다.사례 쿼리가 작동하지 않습니다

누구나 다음 쿼리를 만드는 가장 좋은 방법을 조언 할 수 있습니까? _hs_eb_det1의 문자 길이가 100자를 초과하는 경우

_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_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 

하지만 쿼리가 많은 한을 가지고 있다는 점에서 문제가있다, 따라서 작동되지 않습니다. 존재하는 경우 THEN

답변

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_DET1 이미 아래의 경우 비트를 가지고, 당신의 도움을 주셔서 감사합니다 은 (_HS_EB_CODE1 = 'BF가'WHERE DBO.SRC_HBL_CLNT_CAT FROM _HS_EB_CODE1를 선택). 문제는 다음 비트입니다 - _hs_eb_det #가 100 자 길이를 초과하면 '*'가 앞에 붙습니다. 쿼리 – Nobody

+0

에게 질의의 두 번째 부분을 생성하는 방법을 잘은 문제 : SELECT CASE \t \t THEN (DBO.SRC_TBM_BILLGRP FROM _HS_EB_DET1을 선택 _HS_EB_DET1 그렇지 WHERE (_HS_EB_CODE1 = 'BF'는 WHERE DBO.SRC_HBL_CLNT_CAT FROM _HS_EB_CODE1 선택) 존재할 때 NULL 및 _HS_EB_DET1 <> '') \t 끝 FROM DBO.SRC_TBM_BILLGRP. 존재가 1에서 1까지만 작동하기 때문에, many to many를 지정해야합니다. – Nobody

+0

@PeleO 죄송합니다. 그 코드의 질문을 이해할 수 없습니다. –

관련 문제