SQL

LimYonna 发布于 08/22 09:37
阅读 115
收藏 0
SIP

两张表,如果下面的那张表中的EA00对应上面一张表中的SIP05是已缴费的数据,没有对应那就是未缴费的数据,并且要把他们用EA10分组 怎么把他们弄成一行数据:EA00 EA10 已缴费 未缴费

加载中
0
xukuitao
xukuitao
select b.EA00,b.EA10, case a.SIP00 when null then '未缴费' else '已缴费' end '是否缴费'  from B b  left join A a on a.SIP05=b.EA00 group by b.EA10 
LimYonna
LimYonna
谢谢老啊,你有空可以帮我下我的回答吗?遇到一个行转列的问题,不知道你知道不
0
LimYonna
LimYonna

如第一张表的数据:我已经把他通过行转列的方式把想要的数据的到了,但是那一天的已付人数和为未付人数 查询不出来

0
前端大师傅
前端大师傅

只是求人数很简单,sum一下case when里不为空的就可以了。但楼主说了半天还是没怎么明白,楼主想表达的意思,在下试着做了一下,不知道是不是楼主所要求的:

SELECT
	DATE_FORMAT( ea.EA10, '%m-%d-%Y' ) 日期,
	sum( CASE WHEN s.SIP05 IS NOT NULL THEN 1 ELSE 0 END ) `已交费(人数)`,
	sum( CASE WHEN s.SIP05 IS NULL THEN 1 ELSE 0 END ) `未交费 (人数)`,
	GROUP_CONCAT( CASE WHEN s.SIP05 IS NOT NULL THEN s.SIP05 ELSE '' END ) 已交费名单 
FROM
	t_eazero ea
	LEFT JOIN t_sip s ON s.sip05 = ea.EA00 
GROUP BY
	日期

0
LimYonna
LimYonna

总之谢谢你们了,我找到解决办法了,这就是我想要的结果
--测试数据
use Tempdb
go
if not object_id(N'Tempdb..#tab') is null
    drop table #tab
Go
Create table #tab([EA10] Date,[SP15] int,[pay] nvarchar(22))
Insert #tab
select '2019-08-12',220,N'未付' union all
select '2019-08-21',180,N'已付' union all
select '2019-08-21',250,N'未付' union all
select '2013-03-25',130,N'已付' union all
select '2019-08-07',55,N'已付' union all
select '2019-08-12',220,N'未付'
Go
Select * from #tab
--测试数据结束
 
SELECT EA10,
       MAX(CASE pay WHEN '未付' THEN SP15 ELSE 0 END) 未付,
       MAX(CASE pay WHEN '已付' THEN SP15 ELSE 0 END) 已付,
       sum(cnt) AS cnt
FROM   (
    SELECT EA10,pay,SUM(SP15) SP15,COUNT(1) AS cnt FROM #tab
    GROUP BY EA10,pay
) a
GROUP BY EA10;
 
 
EA10       未付          已付          cnt
---------- ----------- ----------- -----------
2013-03-25 0           130         1
2019-08-07 0           55          1
2019-08-12 440         0           2
2019-08-21 250         180         2

返回顶部
顶部