Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 有没有办法按文本列分组?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 有没有办法按文本列分组?

Sql 有没有办法按文本列分组?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下代码: select CAST(OPERATOR_NAME AS NVARCHAR(MAX)) as 'Utilizador', TERMINAL_DESCRIPTION as 'Terminal', DOCUMENT_DATE as 'Data de Inicio', PAYMENT_LIMIT_DATE as 'Data de Fim', ORIGIN_WAREHOUSE_NAME as 'Loja', DOCUMENT_TYPE_DESCRIPTION as 'Tipos de D

我有以下代码:

select CAST(OPERATOR_NAME AS NVARCHAR(MAX)) as 'Utilizador',
TERMINAL_DESCRIPTION as 'Terminal',
DOCUMENT_DATE as 'Data de Inicio',
PAYMENT_LIMIT_DATE as 'Data de Fim',
ORIGIN_WAREHOUSE_NAME as 'Loja',
DOCUMENT_TYPE_DESCRIPTION as 'Tipos de Documentos' 
from MRD_DOCUMENT_HEADER 
GROUP BY CAST(OPERATOR_NAME AS NVARCHAR(MAX))
但它给了我一个错误:

MRD\u DOCUMENT\u HEADER。TERMINAL\u DESCRIPTION
在选择列表中无效,因为它不包含在聚合函数或
GROUP BY
子句中

我尝试了
VARCHAR(100)
MAX
,但也没有成功

我怎样才能让它工作


更新


您必须将这些列放入
GROUP BY
子句中。它会解决你的问题。只需使用以下代码:

select CAST(OPERATOR_NAME AS NVARCHAR(MAX)) as 'Utilizador',
TERMINAL_DESCRIPTION as 'Terminal',
DOCUMENT_DATE as 'Data de Inicio',
PAYMENT_LIMIT_DATE as 'Data de Fim',
ORIGIN_WAREHOUSE_NAME as 'Loja',
DOCUMENT_TYPE_DESCRIPTION as 'Tipos de Documentos' 
from MRD_DOCUMENT_HEADER 
GROUP BY
  CAST(OPERATOR_NAME AS NVARCHAR(MAX)),
  TERMINAL_DESCRIPTION, DOCUMENT_DATE,
  PAYMENT_LIMIT_DATE,
  ORIGIN_WAREHOUSE_NAME,
  DOCUMENT_TYPE_DESCRIPTION
试试这个-

SELECT  
      Utilizador = OPERATOR_NAME 
    , Terminal = TERMINAL_DESCRIPTION 
    , [Data de Inicio] = DOCUMENT_DATE
    , [Data de Fim] = PAYMENT_LIMIT_DATE
    , Loja = ORIGIN_WAREHOUSE_NAME 
    , [Tipos de Documentos] = DOCUMENT_TYPE_DESCRIPTION
FROM dbo.MRD_DOCUMENT_HEADER
GROUP BY 
      OPERATOR_NAME
    , TERMINAL_DESCRIPTION
    , DOCUMENT_DATE
    , PAYMENT_LIMIT_DATE
    , ORIGIN_WAREHOUSE_NAME
    , DOCUMENT_TYPE_DESCRIPTION
        DOCUMENT_TYPE_DESCRIPTION
或者尝试更优雅的样品-

SELECT DISTINCT
      Utilizador = OPERATOR_NAME 
    , Terminal = TERMINAL_DESCRIPTION 
    , [Data de Inicio] = DOCUMENT_DATE
    , [Data de Fim] = PAYMENT_LIMIT_DATE
    , Loja = ORIGIN_WAREHOUSE_NAME 
    , [Tipos de Documentos] = DOCUMENT_TYPE_DESCRIPTION
FROM dbo.MRD_DOCUMENT_HEADER
最新评论:

更新2以获取最后评论:


如果您在SQL中使用了
GROUP BY
子句,那么在选择列表中,您只能使用
GROUP BY
中使用的相同列,并且任何其他列必须包装在聚合函数中,如
count()
min()
max()
avg()
,等等


这是SQL92/SQL99的要求。然而,一些SQL引擎非常宽容,例如MySQL和SQLite允许打破这一规则。但是MS SQL Server、Oracle和PostgreSQL非常严格。

在这个选择中,似乎只有字母数字值,所以您可以按操作员名称设置顺序


GROUP BY语句与聚合函数一起使用,将结果集按一列或多列(最小、最大、计数)进行分组。

很抱歉,我对这类内容有点陌生,顺便说一句,非常感谢您的快速响应!你能给我举个例子吗?(:请参阅每当您使用某个内容进行分组时,无论select语句中的列名是什么,通常都会将它们包含在group by子句中。请查看上面的查询,我已经更正了它。如果您遇到任何问题,请务必让我知道……)我非常喜欢此解决方案,我只想重复运算符的名称(很抱歉之前没有提及)@Devart它有很多行的数据。例如,OPERATOR_NAME让NAME_LastName重复了很多次。但我想这是不可能的,因为每一行都与DOCUMENT_DATE有联系,并且每个OPERATOR_NAME的值都不同。将SQL Server作为一个工具来使用SELECT提取您需要的数据。然后,您决定如何显示yo使用报表生成器生成ur数据。@我使用metod SELECT(在上面的示例中)在表上显示我的数据。然后我创建了一个过滤器(我在上面更新了)在MS SQL中RB@Devart是的,我很抱歉没有提供那么多关于它的信息,但我真正想要的是你给我的第一个代码,所以它真的很有用!我在MS SQL Server RB上试用了一下,它成功了^^。
SELECT DISTINCT
      Utilizador = OPERATOR_NAME 
    , Terminal = TERMINAL_DESCRIPTION 
    , [Data de Inicio] = DOCUMENT_DATE
    , [Data de Fim] = PAYMENT_LIMIT_DATE
    , Loja = ORIGIN_WAREHOUSE_NAME 
    , [Tipos de Documentos] = DOCUMENT_TYPE_DESCRIPTION
FROM dbo.MRD_DOCUMENT_HEADER
SELECT
      Utilizador = OPERATOR_NAME 
    , Terminal = MAX(TERMINAL_DESCRIPTION)
    , [Data de Inicio] = MAX(DOCUMENT_DATE)
    , [Data de Fim] = MAX(PAYMENT_LIMIT_DATE)
    , Loja = MAX(ORIGIN_WAREHOUSE_NAME)
    , [Tipos de Documentos] = MAX(DOCUMENT_TYPE_DESCRIPTION)
FROM dbo.MRD_DOCUMENT_HEADER
GROUP BY OPERATOR_NAME
SELECT DISTINCT
      Utilizador = OPERATOR_NAME 
    , Terminal = TERMINAL_DESCRIPTION 
    , [Data de Inicio] = CONVERT(VARCHAR(10), DOCUMENT_DATE, 120)
    , [Data de Fim] = PAYMENT_LIMIT_DATE
    , Loja = ORIGIN_WAREHOUSE_NAME 
    , [Tipos de Documentos] = DOCUMENT_TYPE_DESCRIPTION
FROM dbo.MRD_DOCUMENT_HEADER t
WHERE t.DOCUMENT_TYPE_DESCRIPTION = @DOCUMENT_TYPE_DESCRIPTION
    OR t.DOCUMENT_DATE = @DOCUMENT_DATE
    OR t.PAYMENT_LIMIT_DATE = @PAYMENT_LIMIT_DATE
    OR t.CORPORATION_ID = @CORPORATION_ID