Sql 在select distinct查询中按日期排序

Sql 在select distinct查询中按日期排序,sql,sql-server,Sql,Sql Server,我正在从临时表中获取此查询的电子邮件正文数据 SELECT DISTINCT (CONVERT (nvarchar(10), a.ORIG_DT, 110)) as Ingestion_date, a.RECORD_TYPE_CD, a.INVOICE_TYPE, COUNT (a.RECORD_TYPE_CD) FROM @report_invoices a , @report_invoices b WH

我正在从临时表中获取此查询的电子邮件正文数据

 SELECT DISTINCT (CONVERT (nvarchar(10), a.ORIG_DT, 110)) as Ingestion_date,
            a.RECORD_TYPE_CD,
            a.INVOICE_TYPE, 
            COUNT (a.RECORD_TYPE_CD)    
 FROM @report_invoices a , @report_invoices b 
 WHERE  (CONVERT (nvarchar(10), a.ORIG_DT, 103)) = (CONVERT (nvarchar(10), b.ORIG_DT, 103)) 
       AND a.RECORD_TYPE_CD = b.RECORD_TYPE_CD 
       and a.INVOICE_TYPE = b.INVOICE_TYPE 
GROUP BY  (CONVERT (nvarchar(10), a.ORIG_DT, 110)) ,
          a.RECORD_TYPE_CD,
          a.INVOICE_TYPE 
ORDER BY Ingestion_date 
但订单日期有问题

得到这个订单

01-04-2017  ImportedHistory Iron Mountain uploaded  1
01-12-2017  PCard   Iron Mountain uploaded  1
01-13-2017  PCard   Iron Mountain uploaded  25
01-18-2017  ImportedHistory Iron Mountain uploaded  36
01-23-2017  ImportedHistory Iron Mountain uploaded  1
01-24-2017  ImportedHistory Iron Mountain uploaded  1
03-13-2017  PCard   Iron Mountain uploaded  1
05-16-2017  Invoice electronic uploads  1
12-05-2016  PCard   Iron Mountain uploaded  9
12-06-2016  PCard   Iron Mountain uploaded  961
12-06-2016  Serengeti   Iron Mountain uploaded  1
12-07-2016  PCard   Iron Mountain uploaded  196
12-08-2016  Invoice Iron Mountain uploaded  36
12-09-2016  Invoice Iron Mountain uploaded  289
12-14-2016  ImportedHistory Iron Mountain uploaded  64
12-15-2016  CheckRequest    electronic uploads  1
12-15-2016  ImportedHistory Iron Mountain uploaded  144
12-16-2016  ImportedHistory Iron Mountain uploaded  36
12-19-2016  CheckRequest    electronic uploads  81
12-19-2016  PCard   Iron Mountain uploaded  9
12-20-2016  CheckRequest    electronic uploads  9
12-20-2016  Invoice Iron Mountain uploaded  1
12-20-2016  PCard   Iron Mountain uploaded  484
12-21-2016  CheckRequest    electronic uploads  1
12-21-2016  ImportedHistory Iron Mountain uploaded  9
12-21-2016  PCard   Iron Mountain uploaded  64
12-22-2016  CheckRequest    electronic uploads  36
12-22-2016  PCard   Iron Mountain uploaded  1
12-23-2016  CheckRequest    electronic uploads  4

需要更正顺序

由于无法按不存在于distinct query中的列进行排序,因此需要执行以下操作:

SELECT CONVERT (nvarchar(10), ORIG_DT, 110) as Ingestion_date,RECORD_TYPE_CD,INVOICE_TYPE, RECORD_COUNT   
from ( 
    select
    convert(date, a.ORIG_DT) as ORIG_DT,a.RECORD_TYPE_CD,a.INVOICE_TYPE, COUNT (a.RECORD_TYPE_CD) as RECORD_COUNT
    @report_invoices a , @report_invoices b 
    where CONVERT (date, a.ORIG_DT) = CONVERT (date, b.ORIG_DT, 103) AND a.RECORD_TYPE_CD = b.RECORD_TYPE_CD 
    and a.INVOICE_TYPE = b.INVOICE_TYPE GROUP BY convert(date, a.ORIG_DT), a.RECORD_TYPE_CD, a.INVOICE_TYPE 
) X
ORDER BY ORIG_DT 

由于无法按不存在于distinct查询中的列进行排序,因此需要执行以下操作:

SELECT CONVERT (nvarchar(10), ORIG_DT, 110) as Ingestion_date,RECORD_TYPE_CD,INVOICE_TYPE, RECORD_COUNT   
from ( 
    select
    convert(date, a.ORIG_DT) as ORIG_DT,a.RECORD_TYPE_CD,a.INVOICE_TYPE, COUNT (a.RECORD_TYPE_CD) as RECORD_COUNT
    @report_invoices a , @report_invoices b 
    where CONVERT (date, a.ORIG_DT) = CONVERT (date, b.ORIG_DT, 103) AND a.RECORD_TYPE_CD = b.RECORD_TYPE_CD 
    and a.INVOICE_TYPE = b.INVOICE_TYPE GROUP BY convert(date, a.ORIG_DT), a.RECORD_TYPE_CD, a.INVOICE_TYPE 
) X
ORDER BY ORIG_DT 

在“选择和排序方式”中使用相同的格式:

SELECT DISTINCT (CONVERT (nvarchar(10), a.ORIG_DT, 110)) as Ingestion_date,
        a.RECORD_TYPE_CD,
        a.INVOICE_TYPE, 
        COUNT (a.RECORD_TYPE_CD)    
FROM @report_invoices a , @report_invoices b 
WHERE  (CONVERT (nvarchar(10), a.ORIG_DT, 103)) = (CONVERT (nvarchar(10), 
 b.ORIG_DT, 103)) AND a.RECORD_TYPE_CD = b.RECORD_TYPE_CD 
 and a.INVOICE_TYPE = b.INVOICE_TYPE 
 GROUP BY  (CONVERT (nvarchar(10), a.ORIG_DT, 110)) ,
 a.RECORD_TYPE_CD,a.INVOICE_TYPE 
 ORDER BY (CONVERT (nvarchar(10), a.ORIG_DT, 110))

在“选择和排序方式”中使用相同的格式:

SELECT DISTINCT (CONVERT (nvarchar(10), a.ORIG_DT, 110)) as Ingestion_date,
        a.RECORD_TYPE_CD,
        a.INVOICE_TYPE, 
        COUNT (a.RECORD_TYPE_CD)    
FROM @report_invoices a , @report_invoices b 
WHERE  (CONVERT (nvarchar(10), a.ORIG_DT, 103)) = (CONVERT (nvarchar(10), 
 b.ORIG_DT, 103)) AND a.RECORD_TYPE_CD = b.RECORD_TYPE_CD 
 and a.INVOICE_TYPE = b.INVOICE_TYPE 
 GROUP BY  (CONVERT (nvarchar(10), a.ORIG_DT, 110)) ,
 a.RECORD_TYPE_CD,a.INVOICE_TYPE 
 ORDER BY (CONVERT (nvarchar(10), a.ORIG_DT, 110))

您不需要使用
distinct
关键字,因为您已经在所有列上使用了
group by
,选择列表中的
计数除外。
这意味着您可以在order by子句中使用
a.ORIG_DT

 SELECT CONVERT (nvarchar(10), a.ORIG_DT, 110) as Ingestion_date,
        a.RECORD_TYPE_CD,
        a.INVOICE_TYPE, 
        COUNT (a.RECORD_TYPE_CD)    
 FROM @report_invoices a , @report_invoices b 
 WHERE  (CONVERT (nvarchar(10), a.ORIG_DT, 103)) = (CONVERT (nvarchar(10), b.ORIG_DT, 103)) 
       AND a.RECORD_TYPE_CD = b.RECORD_TYPE_CD 
       and a.INVOICE_TYPE = b.INVOICE_TYPE 
GROUP BY  (CONVERT (nvarchar(10), a.ORIG_DT, 110)) ,
          a.RECORD_TYPE_CD,
          a.INVOICE_TYPE 
ORDER BY a.ORIG_DT

您不需要使用
distinct
关键字,因为您已经在所有列上使用了
group by
,选择列表中的
计数除外。
这意味着您可以在order by子句中使用
a.ORIG_DT

 SELECT CONVERT (nvarchar(10), a.ORIG_DT, 110) as Ingestion_date,
        a.RECORD_TYPE_CD,
        a.INVOICE_TYPE, 
        COUNT (a.RECORD_TYPE_CD)    
 FROM @report_invoices a , @report_invoices b 
 WHERE  (CONVERT (nvarchar(10), a.ORIG_DT, 103)) = (CONVERT (nvarchar(10), b.ORIG_DT, 103)) 
       AND a.RECORD_TYPE_CD = b.RECORD_TYPE_CD 
       and a.INVOICE_TYPE = b.INVOICE_TYPE 
GROUP BY  (CONVERT (nvarchar(10), a.ORIG_DT, 110)) ,
          a.RECORD_TYPE_CD,
          a.INVOICE_TYPE 
ORDER BY a.ORIG_DT

试着按a.ORIG_DT排序并检查输出您所说的更正顺序是什么意思?预期结果是什么?如果指定了select DISTINCT,则按项目给出的错误顺序必须出现在选择列表中。JanR日期顺序不在完整日期,它只在每月进行排序。您将其作为字符串排序,而不是按a.ORIG_DT进行的日期类型排序,并检查输出。更正顺序是什么意思?预期结果是什么?Paresh如果指定了select DISTINCT,则按项目给出的错误顺序必须出现在选择列表中。JanR日期顺序不在完整日期,它只在每月排序。您将其作为字符串而不是日期类型排序,它仍然是相同的。我修复的别名很少,你试过最新版本吗?它肯定会工作的。它仍然是原来的样子。如果我修复了几个别名,你试过最新的版本吗?它肯定会起作用,但这不会解决它。问题是它执行的是文本排序而不是日期排序,日期格式不能保证在作为文本排序时也能工作。例如,如果他们正在转换为
yyyymmdd
或类似的变体,那么这就不是问题。但是,由于它们正在转换为
mm dd yyyy
,您无法对该文本进行合理排序。这无法修复它。问题是它执行的是文本排序而不是日期排序,日期格式不能保证在作为文本排序时也能工作。例如,如果他们正在转换为
yyyymmdd
或类似的变体,那么这就不是问题。但由于它们正在转换为
mm dd yyyy
,因此无法对该文本进行合理排序。