sql - 如何使用 SQL 转置队列
问题描述
我正在寻找一种使用 SQL 转置队列的方法,以便第一个表看起来像第二个表。我正在使用火鸟 2.5
编辑:上传的 DDL 和插入
SELECT DISTINCT
FAIXA.CODIGO,
FAIXA.COD_COR,
FAIXA.DESC_COR,
FAIXA.POSICAO,
(CASE WHEN FAIXA.POSICAO = 1 THEN (FAIXA.QTDE) END) AS TAM1,
(CASE WHEN FAIXA.POSICAO = 1 THEN (FAIXA.DT_FINAL) END) AS DT1,
(CASE WHEN FAIXA.POSICAO = 2 THEN (FAIXA.QTDE) END) AS TAM2,
(CASE WHEN FAIXA.POSICAO = 2 THEN (FAIXA.DT_FINAL) END) AS DT2,
(CASE WHEN FAIXA.POSICAO = 3 THEN (FAIXA.QTDE) END) AS TAM3,
(CASE WHEN FAIXA.POSICAO = 3 THEN (FAIXA.DT_FINAL) END) AS DT3,
(CASE WHEN FAIXA.POSICAO = 4 THEN (FAIXA.QTDE) END) AS TAM4,
(CASE WHEN FAIXA.POSICAO = 4 THEN (FAIXA.DT_FINAL) END) AS DT4,
(CASE WHEN FAIXA.POSICAO = 5 THEN (FAIXA.QTDE) END) AS TAM5,
(CASE WHEN FAIXA.POSICAO = 5 THEN (FAIXA.DT_FINAL) END) AS DT5,
(CASE WHEN FAIXA.POSICAO = 6 THEN (FAIXA.QTDE) END) AS TAM6,
(CASE WHEN FAIXA.POSICAO = 6 THEN (FAIXA.DT_FINAL) END) AS DT6,
(CASE WHEN FAIXA.POSICAO = 7 THEN (FAIXA.QTDE) END) AS TAM7,
(CASE WHEN FAIXA.POSICAO = 7 THEN (FAIXA.DT_FINAL) END) AS DT7,
(CASE WHEN FAIXA.POSICAO = 8 THEN (FAIXA.QTDE) END) AS TAM8,
(CASE WHEN FAIXA.POSICAO = 8 THEN (FAIXA.DT_FINAL) END) AS DT8,
(CASE WHEN FAIXA.POSICAO = 9 THEN (FAIXA.QTDE) END) AS TAM9,
(CASE WHEN FAIXA.POSICAO = 9 THEN (FAIXA.DT_FINAL) END) AS DT9,
(CASE WHEN FAIXA.POSICAO = 10 THEN (FAIXA.QTDE) END) AS TAM10,
(CASE WHEN FAIXA.POSICAO = 10 THEN (FAIXA.DT_FINAL) END) AS DT10,
(CASE WHEN FAIXA.POSICAO = 11 THEN (FAIXA.QTDE) END) AS TAM11,
(CASE WHEN FAIXA.POSICAO = 11 THEN (FAIXA.DT_FINAL) END) AS DT11,
(CASE WHEN FAIXA.POSICAO = 12 THEN (FAIXA.QTDE) END) AS TAM12,
(CASE WHEN FAIXA.POSICAO = 12 THEN (FAIXA.DT_FINAL) END) AS DT12,
(CASE WHEN FAIXA.POSICAO = 13 THEN (FAIXA.QTDE) END) AS TAM13,
(CASE WHEN FAIXA.POSICAO = 13 THEN (FAIXA.DT_FINAL) END) AS DT13,
(CASE WHEN FAIXA.POSICAO = 14 THEN (FAIXA.QTDE) END) AS TAM14,
(CASE WHEN FAIXA.POSICAO = 14 THEN (FAIXA.DT_FINAL) END) AS DT14,
(CASE WHEN FAIXA.POSICAO = 15 THEN (FAIXA.QTDE) END) AS TAM15,
(CASE WHEN FAIXA.POSICAO = 15 THEN (FAIXA.DT_FINAL) END) AS DT15,
(CASE WHEN FAIXA.POSICAO = 16 THEN (FAIXA.QTDE) END) AS TAM16,
(CASE WHEN FAIXA.POSICAO = 16 THEN (FAIXA.DT_FINAL) END) AS DT16,
(CASE WHEN FAIXA.POSICAO = 17 THEN (FAIXA.QTDE) END) AS TAM17,
(CASE WHEN FAIXA.POSICAO = 17 THEN (FAIXA.DT_FINAL) END) AS DT17,
(CASE WHEN FAIXA.POSICAO = 18 THEN (FAIXA.QTDE) END) AS TAM18,
(CASE WHEN FAIXA.POSICAO = 18 THEN (FAIXA.DT_FINAL) END) AS DT18,
(CASE WHEN FAIXA.POSICAO = 19 THEN (FAIXA.QTDE) END) AS TAM19,
(CASE WHEN FAIXA.POSICAO = 19 THEN (FAIXA.DT_FINAL) END) AS DT19,
(CASE WHEN FAIXA.POSICAO = 20 THEN (FAIXA.QTDE) END) AS TAM20,
(CASE WHEN FAIXA.POSICAO = 20 THEN (FAIXA.DT_FINAL) END) AS DT20
FROM
(
SELECT
A.NUMERO,
A.DT_FINAL,
A.CODIGO,
B.COR COD_COR,
C.DESCRICAO DESC_COR,
B.TAM,
B.QTDE,
D.POSICAO
FROM
OF1_001 A
INNER JOIN OF_ITEN_001 B ON
B.NUMERO = A.NUMERO
INNER JOIN CADCOR_001 C ON
C.COR = b.COR
INNER JOIN PRODUTO_001 E ON
E.CODIGO = A.CODIGO
INNER JOIN FAIXA_ITEN_001 D ON
(D.FAIXA = E.FAIXA
AND D.TAMANHO = b.TAM)
WHERE A.ID_TIPO IN ('5', '6')
AND b.QTDE > 0
AND a.codigo in (:codigo)
) FAIXA
解决方案
未经测试,但也许是这样的?
with t1 as (
select codigo, cod_cor, des_cor, tam1, dt1,
row_number() over (order by null) as rn
from your table
where tam2 is null and tam3 is null
),
t2 as (
select codigo, cod_cor, des_cor, tam2, dt2
row_number() over (order by null) as rn
from your table
where tam1 is null and tam3 is null
),
t3 as (
select codigo, cod_cor, des_cor, tam3, dt3
row_number() over (order by null) as rn
from your table
where tam1 is null and tam2 is null
)
select
coalesce(t1.codigo, t2.codigo, t3.codigo) as codigo,
coalesce(t1.cod_cor, t2.cod_cor, t3.cod_cor) as cod_cor,
coalesce(t1.des_cor, t2.des_cor, t3.des_cor) as des_cor,
t1.tam1,
t1.dt1,
t2.tam2,
t2.dt2,
t3.tam3,
t3.dt3
from t1
full join t2
on t1.rn = t2.rn
full join t3
on t1.rn = t3.rn
推荐阅读
- go - 在 go 中列出服务
- postgresql - 您可以在一个步骤中使用在另一个表(记录)中找到的数据在 sequelize 中创建新记录吗?
- yarn-workspaces - 将 monorepo 包放在包文件夹下是一种约定,还是 yarn 工作区期望这样?
- java - 客户端错误,我猜与 utf-8 或与表单标签有关的东西。但是解决不了
- python - Flask 会停止检测变化吗?
- authentication - 使用 Auth0 而不是 PassportJS 的好处?
- java - java图形 - 文本颜色不正确呈现
- javascript - 在 API 调用中无法访问图像 URL
- c# - 我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?
- javascript - TypeORM - 将对象添加到 OneToMany 关系