[英]How can I convert MS SQL T-SQL into Subsequent in MySQL
Here I have a MS SQL query which I would like to convert into MySQL.这里我有一个 MS SQL 查询,我想将其转换为 MySQL。 I don't know how to deal with that.
我不知道该怎么处理。
WITH PartitionData as (
SELECT
TOP 10 PurchaseDate.PurchaseDate AS date,
BatchCode,
ROW_NUMBER() OVER( PARTITION BY PurchaseDate.PurchaseDate ORDER BY ( SELECT NULL ) ) AS RowNumber
FROM tblNutBatches
INNER JOIN PurchaseDate ON PurchaseDate.PurchaseDate BETWEEN tblNutBatches.Introduction_date AND tblNutBatches.expiration_date
WHERE PurchaseDate.PurchaseDate = '2004-05-01'
)
SELECT
date as date,
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]
FROM
(
SELECT
date,
BatchCode,
RowNumber
FROM
PartitionData
)AS DataAfterFilter
PIVOT
(
MAX(BatchCode) FOR RowNumber IN ([1], [2], [3], [4], [5], [6], [7], [8], [9])
) A
OUTPUT IN SQL SERVER
Any idea would be appreciated.任何想法将不胜感激。
You would typically use conditional aggregation:您通常会使用条件聚合:
SELECT date,
MAX(CASE WHEN rn = 1 THEN BatchCode end) as BatchCode1,
MAX(CASE WHEN rn = 2 THEN BatchCode end) as BatchCode2,
...
MAX(CASE WHEN rn = 10 THEN BatchCode end) as BatchCode10
FROM (
SELECT
pd.PurchaseDate AS date,
BatchCode,
ROW_NUMBER() OVER(PARTITION BY pd.PurchaseDate ORDER BY BatchCode) AS rn
FROM tblNutBatches nb
INNER JOIN PurchaseDate pd ON pd.PurchaseDate BETWEEN nb.Introduction_date AND nb.expiration_date
WHERE pd.PurchaseDate = '2004-05-01'
) t
WHERE rn <= 10
GROUP BY date
Notes:笔记:
if you want a consistent results, you need ORDER BY
clauses in the subquery and in ROW_NUMBER()
- I used BatchCode
如果你想要一致的结果,你需要在子查询和
ROW_NUMBER()
使用ORDER BY
子句 - 我使用了BatchCode
do prefix BatchCode
with the alias of the table it belongs to用它所属的表的别名做前缀
BatchCode
the PARTITION BY
clause of ROW_NUMBER()
and the outer GROUP BY
clause are not necessary strictly speaking, since the subquery is filtering on just one data anyway;严格来说,
ROW_NUMBER()
的PARTITION BY
子句和外部的GROUP BY
子句不是必需的,因为无论如何子查询只过滤一个数据; I retained them, in case you need to remove the filtering at some point.我保留了它们,以防您需要在某个时候删除过滤。 Accordingly, I moved the top 10 filtering logic form the subquery to the outer query.
因此,我将前 10 个过滤逻辑从子查询移动到外部查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.