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
謝謝您的幫助,已經拿到的情況下位向下。問題在於下一位 - 如果_hs_eb_det#超過100個字符長度,則以'*'作爲前綴。不確定如何創建查詢 – Nobody
查詢的第二部分是問題: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
@PeleO我很抱歉,我不明白這一點代碼的問題。 –