我需要的是:我有一个带有一些字段的屏幕和一个带有查询选项的下拉列表,下拉列表是我的二级规则,如价格,客户名称等。 发生了什么:无论你在下拉列表中选择什么,它总是返回相同的顺序。 ORDER BY部分是这样的:
ORDER BY
CAD.NOME_CADASTRO,
PAG.DATA_EMISSAO,
PAG.NUM_DOCTO,
PAG.DATA_VENCTO,
PAG.VALOR_TITULO,
然后我改为:
DECLARE @TESTE CHAR(1)
SET @TESTE = 'prmOrd'
'...'
ORDER BY
CASE
@TESTE
WHEN 'N' THEN PAG.DATA_EMISSAO
WHEN 'D' THEN PAG.DATA_VENCTO
WHEN 'C' THEN CAD.NOME_CADASTRO
WHEN 'V' THEN PAG.VALOR_TITULO
END
prmOrd保存值N,D,C和V,这是下拉列表中的值在内部处理的方式。 现在它可以工作,但是在生成报告时,如果我选择N,D或V选项,它可以正常工作。当我选择C时,我收到错误状态
无法生成报告。无法打开DataSet.:Inprincipal
Inprincipal是我正在处理的查询的名称。一位同事告诉我把命令作为char来施放,它会解决问题,但我无法使其发挥作用。 还有另外一件奇怪的事情发生了,它在生成报告时我选择了N,D或V然后是C,除了C之外的所有内容都是在命令之后生成的,我收到了该错误消息。然后我继续关闭窗口并重新开始,如果我尝试先生成C,则错误是不同的:
SQL Server错误:从字符串转换日期和/或时间时转换失败。
从那里,尝试生成任何工作选项,返回此错误:
错误:缺少查询表名称或过程名称。
知道我该怎么做才能让它发挥作用吗?
++++++
根据要求,这是原始状态的完整查询:
SELECT
PAG.COD_FILIAL,
PAG.COD_DOCTO,
PAG.SERIE_DOCTO,
PAG.NUM_DOCTO,
PAG.NUM_PARCELA,
PAG.QTDE_PARCELA,
PAG.DATA_VENCTO,
PAG.COD_BANCO_CAIXA,
PAG.COD_FORNECEDOR,
CAD.NOME_CADASTRO,
CAD.APELIDO,
PAG.COD_FORMA_PGTO,
PAG.VALOR_TITULO,
PAG.VALOR_SALDO,
PAG.NATUREZA_TITULO,
PAG.NUM_NOSSO_PAG,
PAG.DATA_EMISSAO,
(CASE SUBSTRING(PAG.COD_DOCTO,1,2)
WHEN 'AD' THEN PAG.VALOR_TITULO
ELSE -PAG.VALOR_TITULO
END) AS VALOR_TITDC,
(CASE SUBSTRING(PAG.COD_DOCTO,1,2)
WHEN 'AD' THEN PAG.VALOR_SALDO
ELSE -PAG.VALOR_SALDO
END) AS VALOR_SALDODC,
PAG.STATUS_TITULO,
PAG.OBSERVACAO
FROM
TBTITULOPAG PAG INNER JOIN TBCADASTROGERAL CAD
ON PAG.COD_FORNECEDOR = CAD.COD_CADASTRO
WHERE
PAG.COD_FILIAL BETWEEN '100' AND '100' AND
PAG.COD_DOCTO BETWEEN '' AND 'Z' AND
PAG.NUM_DOCTO BETWEEN '0' AND '999999' AND
PAG.COD_FORNECEDOR BETWEEN '0' AND '999999' AND
PAG.COD_FORMA_PGTO BETWEEN '0' AND '999999' AND
PAG.STATUS_TITULO like 'A' AND
PAG.NATUREZA_TITULO LIKE 'R' AND
PAG.DATA_EMISSAO BETWEEN '01/01/2017' AND '12/31/2023'
ORDER BY
CAD.NOME_CADASTRO,
PAG.DATA_EMISSAO,
PAG.NUM_DOCTO,
PAG.DATA_VENCTO,
PAG.VALOR_TITULO
答案 0 :(得分:1)
case
表达式的不同返回数据类型必须兼容。而是执行以下操作:
ORDER BY
CASE @TESTE WHEN 'N' THEN PAG.DATA_EMISSAO END,
CASE @TESTE WHEN 'D' THEN PAG.DATA_VENCTO END,
CASE @TESTE WHEN 'C' THEN CAD.NOME_CADASTRO END,
CASE @TESTE WHEN 'V' THEN PAG.VALOR_TITULO END
只有其中一个会产生任何订单差异。