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语句/操作将失败,因为它的数量大

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语句/操作将失败,因为它的数量大于条件语句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也具有不区分大小写的标识符。看见