简单sql查询0.0.0.0.0.0

人间太皮 2013-08-26 10:13:00
A 主表
B,C 两张A的从表。

当A表id在B表时,统计B表某字段money的数据。
当A表id在C表时,统计C表某字段money的数据。

想到case when但是总是返回常量,求解答。。。
...全文
118 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
人间太皮 2013-08-26
  • 打赏
  • 举报
回复
引用 8 楼 wwwwgou 的回复:
[quote=引用 7 楼 ai_quaner 的回复:] 比如说,从D表获得公式,取A表的money进行运算
如果D表的公式,字段存储成一个字符串的话,且比较复杂,不好用SQL解析的话,就用存储过程或函数,或最好放取出数据,放到前台来解析。楼主没给数据,无法给出答案。
SELECT 
	a.*, 
	[money] = COALESCE(a.[money], b.[money], a.[money]), 
	d.公式,
	是否利用公式=(CASE WHEN COALESCE(a.[money], b.[money]) IS NULL THEN 1 ELSE 0 END)
FROM tableA a
    LEFT JOIN tableB b
        ON a.id = b.id
    LEFT JOIN tableC c
        ON a.id = c.id
	LEFT JOIN tableD d
		ON a.id = d.id
[/quote] 恩,用这个函数解决了
KeepSayingNo 2013-08-26
  • 打赏
  • 举报
回复
涉及到从D表取公式算这种,只能在程序中去完成,这是SQL没办法做的。SQL最强大的地方就是集合的运算。
Shawn 2013-08-26
  • 打赏
  • 举报
回复
引用 7 楼 ai_quaner 的回复:
比如说,从D表获得公式,取A表的money进行运算
如果D表的公式,字段存储成一个字符串的话,且比较复杂,不好用SQL解析的话,就用存储过程或函数,或最好放取出数据,放到前台来解析。楼主没给数据,无法给出答案。
SELECT 
	a.*, 
	[money] = COALESCE(a.[money], b.[money], a.[money]), 
	d.公式,
	是否利用公式=(CASE WHEN COALESCE(a.[money], b.[money]) IS NULL THEN 1 ELSE 0 END)
FROM tableA a
    LEFT JOIN tableB b
        ON a.id = b.id
    LEFT JOIN tableC c
        ON a.id = c.id
	LEFT JOIN tableD d
		ON a.id = d.id
人间太皮 2013-08-26
  • 打赏
  • 举报
回复
比如说,从D表获得公式,取A表的money进行运算
人间太皮 2013-08-26
  • 打赏
  • 举报
回复
引用 3 楼 lzw_0736 的回复:

SELECT a.id,SUM(ISNULL(b.money,c.money)) money
FROM a
LEFT JOIN b ON a.id=b.id
LEFT JOIN c ON a.id=c.id
GROUP BY a.id
引用 4 楼 wwwwgou 的回复:
SELECT a.*, [money] = COALESCE(a.[money], b.[money], 0)	--COALESCE函数中可以加任意多的参数,它返回第一个不为NULL的参数值
FROM tableA a
	LEFT JOIN tableB b
		ON a.id = b.id
	LEFT JOIN tableC c
		ON a.id = c.id
忘了说了,如果B,C表中都没有的话,就要从其它表取数据出来 运算
Shawn 2013-08-26
  • 打赏
  • 举报
回复
SELECT a.*, [money] = COALESCE(a.[money], b.[money], 0)	--COALESCE函数中可以加任意多的参数,它返回第一个不为NULL的参数值
FROM tableA a
	LEFT JOIN tableB b
		ON a.id = b.id
	LEFT JOIN tableC c
		ON a.id = c.id
lzw_0736 2013-08-26
  • 打赏
  • 举报
回复

SELECT a.id,SUM(ISNULL(b.money,c.money)) money
FROM a
LEFT JOIN b ON a.id=b.id
LEFT JOIN c ON a.id=c.id
GROUP BY a.id
Andy__Huang 2013-08-26
  • 打赏
  • 举报
回复

select A.ID,B.amt as B金额,C.amt as C金额
from A
left join (select Aid ,SUM(amt) as amt from B group by Aid) B on A.id=B.Aid
left join (select Aid ,SUM(amt) as amt from C group by Aid) C on A.id=C.Aid
lzw_0736 2013-08-26
  • 打赏
  • 举报
回复

SELECT a.id,SUM(ISNULL(b.money,c.money) money
FROM a
LEFT JOIN b ON a.id=b.id
LEFT JOIN c ON a.id=c.id
GROUP BY a.id

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧