首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于飞行MySQL天平

关于飞行MySQL天平
EN

Database Administration用户
提问于 2016-04-29 20:40:48
回答 1查看 39关注 0票数 0

请原谅我用谷歌翻译的英语翻译。

我需要在没有php或其他语言的MySQL查询中解决以下问题:

在“A”列中,我有一个字符串值,在“B”和“C”列中,我有一个数值。“D”列应该等于B - C,只要“A”列具有相同的值。下面是一个例子:

代码语言:javascript
运行
复制
A       B        C       D
Data1   10        2       8
Data1             2       6
Data2   50        2      48
Data2            10      38

@ real,真正的疑问

A=sim_items_djai_declaacancelar

B=sim_items_djai_cantidaddec

C=sim_items_djai_decla_cantidaddec

D=_varSaldo2d

注意:在查询中,只对UNION的第一部分进行计算,其中_varSaldo2d为0

代码语言:javascript
运行
复制
(SELECT
cmn_lst_clientes._desc AS cmn_lst_clientes_desc,
cmn_lst_clientes_un._desc AS cmn_lst_clientes_un_desc,
sim_items_djai_decla._declaacancelar AS sim_items_djai_declaacancelar,
sim_caratula._oficializacion AS sim_caratula_oficializacion,
opr_djai_estado._fb AS opr_djai_estado_fb,
opr_djai_estado._fv AS opr_djai_estado_fv,
sim_items_djai_decla._itemacancelar AS sim_items_djai_decla_itemacancelar,
opr_lst_djai_estados._descesAR as opr_lst_djai_estados_desc,
sim_items_djai._cantidaddec as sim_items_djai_cantidaddec,
sim_lst_um._descesAR as sim_lst_um_desc,
sim_items_djai_decla._destsimn as sim_items_djai_decla_destsimn,
sim_items_djai_decla._oficializacion AS sim_items_djai_decla_oficializacion,
sim_items_djai_decla._item as sim_items_djai_decla_item,
sim_items_djai_decla._cantidaddec as sim_items_djai_decla_cantidaddec,
0 as _varSaldo2d
FROM
sim_items AS sim_items_djai_decla USE INDEX (_declaacancelar)
INNER JOIN sim_caratula USE INDEX (PRIMARY) ON sim_items_djai_decla._declaacancelar = sim_caratula._destsimn AND sim_caratula._destsim = 'SIMI'
INNER JOIN opr_djai_estado USE INDEX (_destsimnitem) ON sim_items_djai_decla._declaacancelar = opr_djai_estado._destsimn AND sim_items_djai_decla._itemacancelar = opr_djai_estado._item
INNER JOIN opr_lst_djai_estados USE INDEX (PRIMARY) ON opr_djai_estado._estado = opr_lst_djai_estados._id
LEFT JOIN sim_items AS sim_items_djai USE INDEX (PRIMARY) ON opr_djai_estado._destsimn = sim_items_djai._destsimn AND opr_djai_estado._oficializacion = sim_items_djai._oficializacion AND opr_djai_estado._item = sim_items_djai._item
INNER JOIN sim_lst_um USE INDEX (PRIMARY) ON sim_items_djai._unidaddec = sim_lst_um._id
INNER JOIN opr_djai USE INDEX (PRIMARY) ON opr_djai_estado._destsimn = opr_djai._destsimn AND opr_djai_estado._oficializacion = opr_djai._oficializacion
INNER JOIN cmn_lst_clientes USE INDEX (PRIMARY) ON opr_djai._cliente = cmn_lst_clientes._id
INNER JOIN cmn_lst_clientes_un USE INDEX (PRIMARY) ON opr_djai._cliente = cmn_lst_clientes_un._cliente AND opr_djai._un = cmn_lst_clientes_un._un
WHERE
(sim_caratula._oficializacion >= '2015-12-22'
and sim_caratula._oficializacion <= '2016-04-29')
and opr_djai._cliente = '61'
GROUP BY
sim_items_djai_decla._declaacancelar,
sim_items_djai_decla._itemacancelar,
sim_items_djai_decla._destsimn)
UNION
(SELECT
cmn_lst_clientes._desc AS cmn_lst_clientes_desc,
cmn_lst_clientes_un._desc AS cmn_lst_clientes_un_desc,
sim_items_djai_decla._destsimn AS sim_items_djai_declaacancelar,
sim_items_djai_decla._oficializacion AS sim_caratula_oficializacion,
opr_djai_estado._fb AS opr_djai_estado_fb,
opr_djai_estado._fv AS opr_djai_estado_fv,
sim_items_djai_decla._item AS sim_items_djai_decla_itemacancelar,
opr_lst_djai_estados._descesAR as opr_lst_djai_estados_desc,
sim_items_djai_decla._cantidaddec as sim_items_djai_cantidaddec,
sim_lst_um._descesAR as sim_lst_um_desc,
'' as sim_items_djai_decla_destsimn,
null AS sim_items_djai_decla_oficializacion,
'' as sim_items_djai_decla_item,
0 as sim_items_djai_decla_cantidaddec,
sim_items_djai_decla._cantidaddec as _varSaldo2d
FROM
sim_items AS sim_items_djai_decla USE INDEX (PRIMARY)
LEFT JOIN sim_caratula USE INDEX (PRIMARY) ON sim_items_djai_decla._declaacancelar = sim_caratula._destsimn AND sim_caratula._destsim = 'SIMI'
LEFT JOIN sim_items ON sim_items_djai_decla._destsimn = sim_items._declaacancelar AND sim_items_djai_decla._item = sim_items._itemacancelar
LEFT JOIN opr_djai ON sim_items_djai_decla._destsimn = opr_djai._destsimn AND sim_items_djai_decla._oficializacion = opr_djai._oficializacion
LEFT JOIN cmn_lst_clientes ON opr_djai._cliente = cmn_lst_clientes._id
LEFT JOIN cmn_lst_clientes_un ON opr_djai._cliente = cmn_lst_clientes_un._cliente AND opr_djai._un = cmn_lst_clientes_un._un
LEFT JOIN opr_djai_estado ON sim_items_djai_decla._destsimn = opr_djai_estado._destsimn AND sim_items_djai_decla._oficializacion = opr_djai_estado._oficializacion AND sim_items_djai_decla._item = opr_djai_estado._item
LEFT JOIN opr_lst_djai_estados ON opr_djai_estado._estado = opr_lst_djai_estados._id
LEFT JOIN sim_lst_um ON sim_items_djai_decla._unidaddec = sim_lst_um._id
WHERE
ISNULL(sim_items._declaacancelar)
AND sim_items_djai_decla._oficializacion >= '2015-12-22'
AND sim_items_djai_decla._oficializacion <= '2016-04-29'
and opr_djai._cliente = '61'
GROUP BY
sim_items_djai_decla._destsimn,
sim_items_djai_decla._oficializacion,
sim_items_djai_decla._item)
ORDER BY
sim_items_djai_declaacancelar,
sim_caratula_oficializacion,
sim_items_djai_decla_itemacancelar
EN

回答 1

Database Administration用户

发布于 2016-05-02 00:25:24

评论

不要以这种方式存储数据。以下列方式储存:

代码语言:javascript
运行
复制
A       B        C       D
Data1   10        2       8
Data1   10        2       6
Data2   50        2      48
Data2   50       10      38

如果您想以另一种方式显示它,那就是应用程序要做的事情。不要试图在SQL中执行此操作。

如何做你想做的事

这在SQL中是可能的,但它是丑陋的。如果你是从

代码语言:javascript
运行
复制
A       B         C
Data1   10        2
Data1             2
Data2   50        2
Data2            10

像这样的东西会产生你想要的东西。(然而,它将有几个额外的列。)

代码语言:javascript
运行
复制
SELECT
        t.A,
        t.B,
        t.C,
        IF (t.A = @previous_A, @previous_B, t.B) - t.C AS D,
        @previous_A := t.A,
        @previous_B := t.B
    FROM table AS t
    JOIN ( SELECT @previous_A := '', @previous_B := 0 ) AS initialize
    ORDER BY t.A ASC, t.B DESC

您可以使用它作为子查询来丢弃额外的列。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/137034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档