Sql 情况不好,需要帮助修复
SQL新手,请接受我的道歉。创建了一个查询,当Sql 情况不好,需要帮助修复,sql,sql-server,Sql,Sql Server,SQL新手,请接受我的道歉。创建了一个查询,当 If HBL_CLNT_CAT._HS_EB_CODE1 = 'BF' then value = TBM_BILLGRP._HS_EB_DET1 If HBL_CLNT_CAT._HS_EB_CODE2 = 'BF' then value = TBM_BILLGRP._HS_EB_DET2 但是,如果_HS_EB_DET超过100个字符,请添加一个“*” 在帮助下开发了一个查询,但是它打破了条件规则,因为“then语句/操作将失败,因为它的数量大
If HBL_CLNT_CAT._HS_EB_CODE1 = 'BF' then value = TBM_BILLGRP._HS_EB_DET1
If HBL_CLNT_CAT._HS_EB_CODE2 = 'BF' then value = TBM_BILLGRP._HS_EB_DET2
但是,如果_HS_EB_DET超过100个字符,请添加一个“*”
在帮助下开发了一个查询,但是它打破了条件规则,因为“then语句/操作将失败,因为它的数量大于条件语句select _hs_eb_code1 from hbl_cat,其中hs_eb_code='bf',只返回1条记录
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 hbl_cat
where hs_eb_code = 'bf'
)
then tbm_bllgrp._hs_eb_det1
end
) as format
from tbm_bllgrp
格式化代码会帮助您找到错误。试试这个:
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 hbl_cat
where hs_eb_code = 'bf'
)
then tbm_bllgrp._hs_eb_det1
end as format
from tbm_bllgrp
) as tmp
格式化代码会帮助您找到错误。试试这个:
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 hbl_cat
where hs_eb_code = 'bf'
)
then tbm_bllgrp._hs_eb_det1
end as format
from tbm_bllgrp
) as tmp
上面的查询在几个地方被打断。工作声明可以如下所示:
SELECT CASE
WHEN len(x.myval) > 100 THEN
left(x.myval,100) + '*'
ELSE
x.myval
END AS format
FROM (
SELECT CASE
WHEN h.HS_EB_CODE1 = 'BF' THEN
t._HS_EB_DET1
WHEN h._HS_EB_CODE2 = 'BF' THEN
t._HS_EB_DET2
ELSE
'unknown option'
END AS myval
FROM HBL_CLNT_CAT AS h
JOIN TBM_BILLGRP AS t ON ??? -- how are the two tables connected?
WHERE ??? -- some condition or do you want all rows in the table?
) AS x
但您需要首先告诉我们,TBM\u BILLGRP和HBL\u CLNT\u CAT如何连接,以及如何选择行。
顺便说一句,大写在SQLServer中是没有意义的。标识符不区分大小写,只要它们不包含在双引号或方括号[]中。上述查询在几个地方被打断。工作声明可以如下所示:
SELECT CASE
WHEN len(x.myval) > 100 THEN
left(x.myval,100) + '*'
ELSE
x.myval
END AS format
FROM (
SELECT CASE
WHEN h.HS_EB_CODE1 = 'BF' THEN
t._HS_EB_DET1
WHEN h._HS_EB_CODE2 = 'BF' THEN
t._HS_EB_DET2
ELSE
'unknown option'
END AS myval
FROM HBL_CLNT_CAT AS h
JOIN TBM_BILLGRP AS t ON ??? -- how are the two tables connected?
WHERE ??? -- some condition or do you want all rows in the table?
) AS x
但您需要首先告诉我们,TBM\u BILLGRP和HBL\u CLNT\u CAT如何连接,以及如何选择行。
顺便说一句,大写在SQLServer中是没有意义的。标识符不区分大小写,只要它们不包含在双引号或括号[]中。但您的查询似乎没有使用您在描述中提到的TBM\u BILLGRP.\u HS\u EB\u DET2。它也没有使用两个表之间的任何关系。但是您的查询似乎没有使用您在描述中提到的TBM_BILLGRP.\u HS_EB_DET2。它也不使用两个表之间的任何关系。向hbl_cat添加唯一约束是否有意义?然后,当插入重复项时,它将失败,而不是在选择重复项时。向hbl_cat添加唯一约束是否有意义?然后,当插入重复项时,它将失败,而不是在选择重复项时。PostgreSQL?他有sql server标签。@ypercube:谢谢!我改正了。通常,SQL Server也具有不区分大小写的标识符。参见PostgreSQL?他有sql server标签。@ypercube:谢谢!我改正了。通常,SQL Server也具有不区分大小写的标识符。看见