我想要最多多列

时间:2021-02-15 15:27:51

标签: sql sql-server azure-synapse

要求是我需要的 从 A 到 I 列的 ID、日期和最大值。 A、B、C、D、E、F、G 列的 MAX 值,我需要 SQL 服务器或 Synapse 查询

enter image description here

已经试过了

select max(A) from (values( A,B,C,D,E,F,G, I)) as A) as Z

这适用于 sql 但不适用于 Azure 突触

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您可以使用apply

select t.*, v.max_val
from t cross apply
     (select max(v.col) as max_val
      from (values (a), (b), . . .) v(col)
     ) v;

答案 1 :(得分:0)

Azure Synapse Analytics 中的无服务器 SQL 池(以前称为按需 SQL)支持 GREATEST,因此这种类型的查询在无服务器中很容易,例如

SELECT id, dt, GREATEST ( a, b, c, d, e, f, g, h, i ) x
FROM yourTable

对于专用 SQL 池,您可以使用 UNPIVOT 来达到相同的效果:

SELECT id, dt, MAX(x) x
FROM yourTable
UNPIVOT ( x for y In ( a, b, c, d, e, f, g, h, i ) ) AS upvt
GROUP BY id, dt

GREATEST 可能在某些时候添加到专用 SQL 池中,因此可能值得时不时检查一下。

由于 SparkSQL 支持 GREATEST,您可以做的另一件事是使用 Azure Synapse 笔记本从专用 SQL 池中快速拉取数据,对其进行处理并将其弹出,例如作为批处理的一部分。这是一个使用 Scala 笔记本的简单示例。

单元格 1:

// Get the table from the dedicated SQL pool into a dataframe
val df = spark.read.synapsesql("someSQLPool.dbo.greatestWorking")

// Save the dataframe as a temp view to make it available to SparkSQL
df.createOrReplaceTempView("greatestWorking")

单元格 2:

// Write the result to a new data frame to be saved back into the dedicated SQL pool
val result = spark.sql("SELECT id, dt, GREATEST ( a, b, c, d, e, f, g, h, i ) AS x FROM greatestWorking") 

result.write.synapsesql("someSQLPool.dbo.result", Constants.INTERNAL)
相关问题