Sql两表查询 合并到一表

 

转自:https://bbs.csdn.net/topics/392421959?page=1

不好意思 表2中还有一个条件
表A中 
ID   name
 1    刘德华
2     张杰
3     林俊杰

 表B中
ID AID  SNAME                  Stime
 1     1         冰雨               1998-10
2     1       爱你一万年       2000-08
3     2      三生三世           2017-03
4     1      我恨我痴心      1996-10
5     2      这就是爱           2011-05
6     3       小酒窝              2008-09
7     2       逆战                 2012-01
8     3     醉赤壁               2008-10
9     3      江南                    2004-06
10   2     给女儿的一封信 2018-05

 我现在想得到结果(后面的sName1-10字段根据实际增长到10个以内)
ID      AName        SName1       stime1         SName2       stime2         SName3        stime3             SName4            stime4
 1       刘德华              冰雨        1998-10      爱你一万年   2000-08     我恨我痴心    1996-10
2       张杰             三生三世      2017-03      这就是爱        2011-05         逆战           2012-01   给女儿的一封信     2018-05
3       林俊杰             小酒窝     2008-09      醉赤壁           2008-10        江南             2004-06

 这个代码要如何写?求助中? 

0 2018-07-26 19:39:50

只看TA 引用 举报 #1    得分 0

sql语句实现多条数据合为一条数据今天遇到个函数感觉很有用,给你们举个例子吧: 当我们给用户多个角色的时候,我们的用户角色表的展示方式有两种, 一种是把所有角色何在一起变成一个字符串,然后在该表查看用户就能看到一条关于用户角色的数据 另一种就是插入多条数据,一个用户一个角色,然后再对同一个用户insert一个角色,也就是当查询一个用户的时候,返回的是多条数据 个人感觉返回多条的数据这种方式便于数据库管理,但是如果在前台展示

LikeStudyDR

Bbs1

题中要求的结果做不到。
楼主想必是以学习为目的。
1.SQLserver环境下case纵转横,需行标题为表示分类的字段(例如:AName),而不是表示明细的字段。

2.access或Excel环境下,交叉查询transform后只可跟一个字段,而题中有两个。当然,也可以考虑先合再分。貌似还有其他难点,头有点痛,就不细想了。毕竟我只是来指个路,而题目的结果也不是最终目的。

百度关键字:
SQL纵转横
VBA transform

0 2018-07-26 22:06:36

只看TA 引用 举报 #2    得分 60

SQL语句 合并列值 将一列的多个值合并成一行oralce写法: select WM_CONCAT(A.title) as citys from tmpcity A sql server写法: select stuff((select ','+A.title from tmpCity A FOR xml PATH('')), 1, 1, '') as citys

nippycn

Bbs1

SQL纵转横能不能实现下面的目的:
ID      AName        1996-10          1998-10        2000-08    2004-06         2008-09        2008-10     2011-05      2012-01   2017-03  2018-04
  1       刘德华      我恨我痴心          冰雨          爱你一万年   
 2       张杰                                                                                                                                                    这就是爱        逆战       三生三世    给女儿的一封信  
 3       林俊杰                                                                               江南                 小酒窝         醉赤壁

ID      AName        SName1       stime1         SName2       stime2         SName3        stime3             SName4            stime4
  1       刘德华              冰雨        1998-10      爱你一万年   2000-08     我恨我痴心    1996-10
 2       张杰             三生三世      2017-03      这就是爱        2011-05         逆战           2012-01   给女儿的一封信     2018-05
 3       林俊杰             小酒窝     2008-09      醉赤壁           2008-10        江南             2004-06

0 2018-07-26 22:33:51

只看TA 引用 举报 #3    得分 0

SQL文实现,一对多数据合并前一段时间由于项目的需要,受一个同事的启发写一段SQL文,觉的具有一定的代表性,所以把它记下来以供参考. 大意是有一个部门表和一个员工表,现在需要使用一条查询语句将部门信息以及该部门的所有员工列出来,一个部门使用一条记录,员工间使用逗号分隔.这里至所以有这样的要求完全是从项目框架以及数据传递的方便性来考虑. (deparments) (employees)

nippycn

Bbs1

引用 2 楼 qq_42805993 的回复:

题中要求的结果做不到。
楼主想必是以学习为目的。
1.SQLserver环境下case纵转横,需行标题为表示分类的字段(例如:AName),而不是表示明细的字段。

2.access或Excel环境下,交叉查询transform后只可跟一个字段,而题中有两个。当然,也可以考虑先合再分。貌似还有其他难点,头有点痛,就不细想了。毕竟我只是来指个路,而题目的结果也不是最终目的。

百度关键字:
SQL纵转横
VBA transform



SQL纵转横能不能实现下面的目的:
ID      AName        1996-10      1998-10    2000-08    2004-06   2008-09        2008-10     2011-05      2012-01   2017-03      2018-04
   1       刘德华      我恨我痴心    冰雨       爱你一万年   
  2       张杰                                                                                                                                      这就是爱        逆战       三生三世    给女儿的一封信  
  3       林俊杰                                                                     江南           小酒窝         醉赤壁

0 2018-07-26 22:35:27

只看TA 引用 举报 #4    得分 0

Mysql之一对多查询,如何将多条记录合并成一条记录数据库环境:mysql5.6需求描述(图1): 最终期望的结果(图2): 如上图所示,现有两张表cj_lottery_winning_record和cj_lottery_winning_user_info 两者的关系是一对多。 现在进行连接查询时, SELECT a.id winning_id, a.awards_setting_id, a.award_name,

二月十六

Bbs9 版主

Blank Blank Blank Blank

SQL code?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

--测试数据

if not object_id(N'Tempdb..#A'is null

    drop table #A

Go

Create table #A([ID] int,[name] nvarchar(23))

Insert #A

select 1,N'刘德华' union all

select 2,N'张杰' union all

select 3,N'林俊杰'

GO

if not object_id(N'Tempdb..#B'is null

    drop table #B

Go

Create table #B([ID] int,[AID] int,[SNAME] nvarchar(27),[Stime] nvarchar(27))

Insert #B

select 1,1,N'冰雨',N'1998-10' union all

select 2,1,N'爱你一万年',N'2000-08' union all

select 3,2,N'三生三世',N'2017-03' union all

select 4,1,N'我恨我痴心',N'1996-10' union all

select 5,2,N'这就是爱',N'2011-05' union all

select 6,3,N'小酒窝',N'2008-09' union all

select 7,2,N'逆战',N'2012-01' union all

select 8,3,N'醉赤壁',N'2008-10' union all

select 9,3,N'江南',N'2004-06' union all

select 10,2,N'给女儿的一封信',N'2018-05'

Go

--测试数据结束

DECLARE @sql VARCHAR(8000)

SET @sql = ';WITH cte AS (

Select *,ROW_NUMBER()OVER(PARTITION BY AID ORDER BY Stime)rn from #B

)

select AId,#A.Name'

;WITH cte AS (

Select *,ROW_NUMBER()OVER(PARTITION BY AID ORDER BY Stime)rn from #B

)

SELECT  @sql = @sql + ',max(case rn when ' + RTRIM(rn)

        ' then SNAME else null end)[SNAME' + RTRIM(rn) + ']'',max(case rn when ' + RTRIM(rn)

        ' then Stime else null end)[Stime' + RTRIM(rn) + ']'

FROM    SELECT DISTINCT

                    cte.rn

          FROM      cte

        ) a

SET @sql = @sql

    ' from cte join #A on #a.Id = Aid group by AId,#A.Name order by  AId'

EXEC(@sql)



 

0 2018-07-27 09:09:58

只看TA 引用 举报 #5    得分 480

二月十六

Bbs9 版主

Blank Blank Blank Blank

SQL code?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

--测试数据

if not object_id(N'Tempdb..#A'is null

    drop table #A

Go

Create table #A([ID] int,[name] nvarchar(23))

Insert #A

select 1,N'刘德华' union all

select 2,N'张杰' union all

select 3,N'林俊杰'

GO

if not object_id(N'Tempdb..#B'is null

    drop table #B

Go

Create table #B([ID] int,[AID] int,[SNAME] nvarchar(27),[Stime] nvarchar(27))

Insert #B

select 1,1,N'冰雨',N'1998-10' union all

select 2,1,N'爱你一万年',N'2000-08' union all

select 3,2,N'三生三世',N'2017-03' union all

select 4,1,N'我恨我痴心',N'1996-10' union all

select 5,2,N'这就是爱',N'2011-05' union all

select 6,3,N'小酒窝',N'2008-09' union all

select 7,2,N'逆战',N'2012-01' union all

select 8,3,N'醉赤壁',N'2008-10' union all

select 9,3,N'江南',N'2004-06' union all

select 10,2,N'给女儿的一封信',N'2018-05'

Go

--测试数据结束

DECLARE @sql VARCHAR(MAX)

SET @sql = 'select AId,#A.Name'

SELECT  @sql = @sql + ',max(case Stime when ''' + Stime

        ''' then SNAME else null end)[' + Stime + ']'

FROM    SELECT DISTINCT

                    Stime

          FROM      #B

        ) a

SET @sql = @sql

    'from #B join #A on #a.Id = Aid group by AId,#A.Name order by  AId'

EXEC(@sql)



0 2018-07-27 09:11:33

只看TA 引用 举报 #6    得分 0

将一列具有相同数据的行合并到同一行如何将第一列具有相同数据的行合并到同一行,但要保护重复内容,将重复内容依次填充到重复行中第一行后面,首列相同的,将后面对应列各单元格内容合并到重复行中第一行后对应的单元格内,并且用&连接,对应列只有一个单元格有内容,则不添加&符号,若为空,则对应内容也为空,如下图最好用excel公式收起A  B  C  D90 a 90 aec90 e 80 rt90 c 70 y80 r80 t...

nippycn

Bbs1

引用 6 楼 sinat_28984567 的回复:

SQL code?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

--测试数据

if not object_id(N'Tempdb..#A'is null

    drop table #A

Go

Create table #A([ID] int,[name] nvarchar(23))

Insert #A

select 1,N'刘德华' union all

select 2,N'张杰' union all

select 3,N'林俊杰'

GO

if not object_id(N'Tempdb..#B'is null

    drop table #B

Go

Create table #B([ID] int,[AID] int,[SNAME] nvarchar(27),[Stime] nvarchar(27))

Insert #B

select 1,1,N'冰雨',N'1998-10' union all

select 2,1,N'爱你一万年',N'2000-08' union all

select 3,2,N'三生三世',N'2017-03' union all

select 4,1,N'我恨我痴心',N'1996-10' union all

select 5,2,N'这就是爱',N'2011-05' union all

select 6,3,N'小酒窝',N'2008-09' union all

select 7,2,N'逆战',N'2012-01' union all

select 8,3,N'醉赤壁',N'2008-10' union all

select 9,3,N'江南',N'2004-06' union all

select 10,2,N'给女儿的一封信',N'2018-05'

Go

--测试数据结束

DECLARE @sql VARCHAR(MAX)

SET @sql = 'select AId,#A.Name'

SELECT  @sql = @sql + ',max(case Stime when ''' + Stime

        ''' then SNAME else null end)[' + Stime + ']'

FROM    SELECT DISTINCT

                    Stime

          FROM      #B

        ) a

SET @sql = @sql

    'from #B join #A on #a.Id = Aid group by AId,#A.Name order by  AId'

EXEC(@sql)




真牛啊,不过,这个语句可以在.NET的查询语句中吗,这些定义变量啥的会丢失吗?

0 2018-07-27 19:46:52

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值