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
,因此无法对该文本进行合理排序。