如何将MS SQL T-SQL转换为MySQL中的后续SQL

如何将MS SQL T-SQL转换为MySQL中的后续SQL,mysql,sql,datetime,pivot,aggregate-functions,Mysql,Sql,Datetime,Pivot,Aggregate Functions,这里我有一个MS SQL查询,我想把它转换成MySQL。我不知道该怎么处理 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 tblNutB

这里我有一个MS SQL查询,我想把它转换成MySQL。我不知道该怎么处理

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
SQL SERVER中的输出


任何想法都将不胜感激。

您通常会使用条件聚合:

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
注:

如果您希望得到一致的结果,则需要在子查询和行号中使用ORDER BY子句-我使用了BatchCode

使用BatchCode所属表的别名作为前缀

严格来说,ROW_NUMBER的PARTITION BY子句和outer GROUP BY子句不是必需的,因为子查询只过滤一个数据;我保留了它们,以防在某个时候需要删除过滤。因此,我将前10个过滤逻辑从子查询移动到外部查询


MySQL希望返回刻度,而不是方括号。哪个MySQL verison?谢谢你的回复版本是8.0.22.0你是说“1”而不是[1]?其余的代码应该可以相应地工作?MySQL并没有类似于PIVOT的东西。您需要在分组和条件聚合中使用。以创建表+插入脚本和所需结果的形式提供示例数据。PS.TSQL代码可以自由删除。我们不需要它。谢谢你的回答@GMB,但批处理代码是动态的,在这种情况下,我该如何处理?我正在尝试使用您转换的代码。非常感谢您的帮助。@MdFaridUddinKiron:是的,这不是问题。与您最初的版本一样,每个日期最多可以处理10个批处理代码?