我是MySQL的新手,所以想不出如何解决这个问题.这是我的数据表

enter image description here

我想返回3列dtls(详细信息),Purchase_Amount作为贷项,Sale_Amount作为借项

但当Purchase_id=3时,必须 Select Purchase_Amount,且Sale_Amount应为0,反之亦然

所需结果如下图所示

enter image description here

这是对数字3的必选结果

如果我试一试

SELECT * 
FROM (
        select c.Sale_amount as debit 
        from yarn c 
        where c.Sale_id=3
    ) A, 
    (
        select c2.Purchase_amount as credit 
        from yarn c2 
        where c2.Purchase_id=3
    ) B;

它提供了奇怪的结果

此查询不起作用

SELECT A as debit, B as credit 
FROM (
        select c.Sale_amount as debit 
        from yarn c 
        where c.Sale_id=3
    ) A, 
    (
        select c2.Purchase_amount as credit 
        from yarn c2 
        where c2.Purchase_id=3
    ) B;

需要帮助.

推荐答案

筛选表以仅获取Purchase_idSale_id等于3的行,并使用CASE表达式获取列CreditDebit:

SELECT CASE WHEN Purchase_id = 3 THEN Purchase_amount ELSE 0 END AS Credit,
       CASE WHEN Sale_id = 3 THEN Sale_amount ELSE 0 END AS Debit
FROM yarn
WHERE 3 IN (Purchase_id, Sale_id);

Mysql相关问答推荐

拒绝非超级用户访问停靠的MariaDB(超级用户工作)

使用复合主键更新后的MySQL触发器失败

如何合并有多行的json列

使用Check查看过go 两个月是否完成了IRM Meetup

关于设置为 NOT NULL 时的 CHAR 默认值

生成直到 10 的平方数序列

如何在 mysql 的 group by 子句中 Select 最后创建的记录?

有人可以帮我优化这个查询吗?

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

SQL 查找边界之间的值

我将如何构建一个 SQL 查询来从交易表中 Select 第一次存款、第二次存款和额外存款

查询以查找可用时隙

如何在sql中挑出某些名称

没有 JDBC 类型的方言映射:1111

你如何在 Node.js 中模拟 MySQL(没有 ORM)?

在mysql中增量更新值

MySQL - 错误 1045 - 访问被拒绝

PHP mySQL - 将新记录插入表中,主键自动递增

为什么 MySQL 自动增量会在插入失败时增加?

将 UTF8 表上的 latin1 字符转换为 UTF8