求sql语句

qq_35039833 2018-07-07 01:49:15
表A
id | status |
03 | Y |
04 | N |
05 | Y |

表B
id| TC01 | TC02 | TC03 |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
05| AS-AS | 7.00 | |
05| AS-AW | 7.00 | |
05| AS-AQE | 7.00 | |

求的语句
表A中 status为Y 我就拿表A的id来查表B

将通过表A id查出来表B的TC01字段进行对比(确保查询结果中所有字段相同)

将TC02合计 放入TC03
...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35039833 2018-07-07
  • 打赏
  • 举报
回复
引用 7 楼 sinat_28984567 的回复:
上边的是测试数据不用管,直接看测试数据结束后边的的select语句,把表名环城楼主的就行了
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([id] nvarchar(22),[status] nvarchar(21))
Insert #A
select N'03',N'Y' union all
select N'04',N'N' union all
select N'05',N'Y'
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([id] nvarchar(22),[TC01] nvarchar(26),[TC02] decimal(18,8),[TC03] int)
Insert #B
select N'03',N'AS-AS',7.00,0 union all
select N'03',N'AS-AS',7.00,null union all
select N'03',N'AS-AS',7.00,null union all
select N'05',N'AS-AS',7.00,null union all
select N'05',N'AS-AW',7.00,null union all
select N'05',N'AS-AQE',7.00,null
Go
--测试数据结束
SELECT id,
TC01,
TC02,
CASE
WHEN rn1 = rn2 THEN
t1.sumtc03
ELSE
TC03
END AS tc03
FROM
(
SELECT #B.*,
COUNT(TC01) OVER (PARTITION BY #B.id) AS rn1,
COUNT(TC01) OVER (PARTITION BY #B.id, TC01) AS rn2,
SUM(TC02) OVER (PARTITION BY #B.id ORDER BY #B.id) AS sumtc03
FROM #B
JOIN
(SELECT * FROM #A WHERE status = 'Y') t
ON t.id = #B.id
) t1;





谢谢帮助
二月十六 版主 2018-07-07
  • 打赏
  • 举报
回复
上边的是测试数据不用管,直接看测试数据结束后边的的select语句,把表名环城楼主的就行了
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([id] nvarchar(22),[status] nvarchar(21))
Insert #A
select N'03',N'Y' union all
select N'04',N'N' union all
select N'05',N'Y'
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([id] nvarchar(22),[TC01] nvarchar(26),[TC02] decimal(18,8),[TC03] int)
Insert #B
select N'03',N'AS-AS',7.00,0 union all
select N'03',N'AS-AS',7.00,null union all
select N'03',N'AS-AS',7.00,null union all
select N'05',N'AS-AS',7.00,null union all
select N'05',N'AS-AW',7.00,null union all
select N'05',N'AS-AQE',7.00,null
Go
--测试数据结束
SELECT id,
TC01,
TC02,
CASE
WHEN rn1 = rn2 THEN
t1.sumtc03
ELSE
TC03
END AS tc03
FROM
(
SELECT #B.*,
COUNT(TC01) OVER (PARTITION BY #B.id) AS rn1,
COUNT(TC01) OVER (PARTITION BY #B.id, TC01) AS rn2,
SUM(TC02) OVER (PARTITION BY #B.id ORDER BY #B.id) AS sumtc03
FROM #B
JOIN
(SELECT * FROM #A WHERE status = 'Y') t
ON t.id = #B.id
) t1;


qq_35039833 2018-07-07
  • 打赏
  • 举报
回复
[quote=引用 5 楼 sinat_28984567 的回复:]
额,就是测试数据对应想要的结果,比如你这个
测试数据如下:
表A
id | status |
03 | Y |
04 | N |
05 | Y |

表B
id| TC01 | TC02 | TC03 |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
05| AS-AS | 7.00 | |
05| AS-AW | 7.00 | |
05| AS-AQE | 7.00 | |

我想要的结果是:
id| TC01 | TC02 | TC03 |
03| AS-AS | 7.00 | 21.00 |
03| AS-AS | 7.00 | 21.00 |
03| AS-AS | 7.00 | 21.00 |
05| AS-AS | 7.00 | |
05| AS-AW | 7.00 | |
05| AS-AQE | 7.00 | |

二月十六 版主 2018-07-07
  • 打赏
  • 举报
回复
额,就是测试数据对应想要的结果,比如你这个
测试数据如下:
表A
id | status |
03 | Y |
04 | N |
05 | Y |

表B
id| TC01 | TC02 | TC03 |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
05| AS-AS | 7.00 | |
05| AS-AW | 7.00 | |
05| AS-AQE | 7.00 | |

我想要的结果是:
id| TC01 | TC02 | TC03 |
03| AS-AS | 7.00 | Y |
03| AS-AS | 7.00 | N |
03| AS-AS | 7.00 | Y |
05| AS-AS | 7.00 | |
05| AS-AW | 7.00 | |
05| AS-AQE | 7.00 | |

上边的结果是我瞎编的,楼主写出来你需要的真正的结果
qq_35039833 2018-07-07
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
表A
id | status |
03 | Y |
04 | N |
05 | Y |

表B
id| TC01 | TC02 | TC03 |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
05| AS-AS | 7.00 | |
05| AS-AW | 7.00 | |
05| AS-AQE | 7.00 | |

这个数据对应的结果是什么?


不是很明白数据对应的结果这句, 不好意思 菜鸟一个.....

二月十六 版主 2018-07-07
  • 打赏
  • 举报
回复
表A
id | status |
03 | Y |
04 | N |
05 | Y |

表B
id| TC01 | TC02 | TC03 |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
03| AS-AS | 7.00 | |
05| AS-AS | 7.00 | |
05| AS-AW | 7.00 | |
05| AS-AQE | 7.00 | |

这个数据对应的结果是什么?
qq_35039833 2018-07-07
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
最后的结果是什么样的?


如果 TC01字段全部相同 就将TC02的值相加起来 放入一个空字段
二月十六 版主 2018-07-07
  • 打赏
  • 举报
回复
最后的结果是什么样的?

34,590

社区成员

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

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