首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server查询需要使用下拉列表中的值,如何?

SQL Server查询需要使用下拉列表中的值,如何?
EN

Stack Overflow用户
提问于 2018-01-08 11:24:19
回答 1查看 64关注 0票数 0

我需要的是:我有一个带有一些字段的屏幕和一个带有查询选项的下拉列表,而下拉列表是我的次要规则,比如价格、客户名称等等。发生了什么:不管您在下拉列表中选择了什么,它总是返回相同的顺序。按部分顺序如下:

代码语言:javascript
复制
ORDER BY

CAD.NOME_CADASTRO,
PAG.DATA_EMISSAO,
PAG.NUM_DOCTO,
PAG.DATA_VENCTO,
PAG.VALOR_TITULO,

然后我改变了这个:

代码语言:javascript
复制
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

In主体是我正在处理的查询的名称。一位同事告诉我把命令当作焦炭,这样可以解决问题,但我不能让它起作用。还有另一件奇怪的事情发生了,当生成报告时,我选择N,D或V,然后选择C,除C之外,都是在命令之后生成的,我得到了错误消息。然后我继续关闭窗口并重新开始,如果我首先尝试生成C,则错误是不同的:

Server错误:从字符串转换日期和/或时间时,转换失败。

然后,尝试生成任何工作选项,返回以下错误:

错误:缺少查询表名称或过程名称。

知道我该怎么做才能成功吗?

++++++

根据请求,这是原始状态下的完整查询:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-08 11:30:13

case表达式的不同返回数据类型必须兼容。相反,请执行以下操作:

代码语言:javascript
复制
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

他们中只有一人会有任何不同的订单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48149319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档