我有一张产品销售表,可能如下所示:
product | amount | ptype | pdate
p1 | 1.00 | sale | 01/01
p1 | 2.00 | base | 01/02
p2 | 1.50 | sale | 02/03
p3 | 5.25 | base | 10/10
Run Code Online (Sandbox Code Playgroud)
我想构建一个表格,每行显示一个产品,金额总和,如果产品是唯一的,则显示其他类型显示类型为"VAR",如果产品是唯一的则显示日期,否则显示日期为NULL.这样结果如下:
product | total | ptype | pdate
p1 | 3.00 | VAR | (NULL)
p2 | 1.50 | sale | 02/03
p3 | 5.25 | base | 10/10
Run Code Online (Sandbox Code Playgroud)
我通过以下方式完成了我需要的结果:
SELECT DISTINCT product
,(SELECT SUM(amount) FROM T as b GROUP BY b.product HAVING a.product …Run Code Online (Sandbox Code Playgroud) 我有一个表T的列x,y,a,b使得
SELECT x,y,a,b FROM T
ORDER BY x,y,a,b
Run Code Online (Sandbox Code Playgroud)
给我下表
x | y | a | b
x1 | y1 | a1 | b1
x1 | y1 | a1 | b2
x1 | y1 | a2 | b1
x1 | y2 | a1 | b1
x1 | y2 | a1 | b2
x1 | y2 | a2 | b1
Run Code Online (Sandbox Code Playgroud)
我如何获得每个x,y组的第一行?也就是说,我如何获得下表
x | y | a | b
x1 | y1 | …Run Code Online (Sandbox Code Playgroud) 我不知道这个操作是否有名称,但它类似于线性代数中的转置.
有没有办法转1表n表如T1
c_1|c_2|c_3|...|a_n
-------------------
1 |2 |3 |...|n
Run Code Online (Sandbox Code Playgroud)
进入一个2表,如下所示
key|val
-------
c_1|1
b_2|2
c_3|3
. |.
. |.
a_n|n
Run Code Online (Sandbox Code Playgroud)
我假设T1中的每一列c_i都不太可能被识别出来.
sql ×3
group-by ×2
performance ×2
sybase ×2
count ×1
sql-order-by ×1
sum ×1
transpose ×1
unpivot ×1