sqlserver取相同列下其余不同列的数据连接

来源:互联网 发布:网页版数据库查询工具 编辑:程序博客网 时间:2024/05/21 19:43

今天在项目中遇到的这个问题,确实纠结我挺久的。其实这种需求如果用代码来实现的话只需要一个典然后就能实现,然而,有时候就偏偏让你写个sql,然后就去执行下就OK了,因此,问题就来了(标题挺乱的,也取得很不好)

其实这里的思想很简单,就是分列插入临时表,然后处理临时表,最终得到结果

语文能力很差,那就直接上代码:

/*******原需求:--1 导出所有四级(省、市、区/县、镇/街道)、所属区号、工作时长、能否取货、能否派货、所属分部--1.1 若“所属区号、上班时间、下班时间、是否有记录、所属分部”存在不同的值,则并列显示(逗号隔开)********/--第一步:取出所需字段,并去重select distinct DR_250,DR_251,DR_252,DR_260,DR_234,DR_254,DR_273,DR_274,DR_208 into #TMP from  TB_DriverDomainNew--第二步:取单个差异字段,并保存到临时表中SELECT distinct DR_250,DR_251,DR_252,DR_260,DR_208 INTO #TMP1 FROM #TMP--选择有DR_208不相同的记录SELECT distinct DR_250,DR_251,DR_252,DR_260,DR_234 INTO #TMP2 FROM #TMP--选择有DR_234不相同的记录SELECT distinct DR_250,DR_251,DR_252,DR_260,DR_254 INTO #TMP3 FROM #TMP--选择有DR_254不相同的记录SELECT distinct DR_250,DR_251,DR_252,DR_260,DR_273 INTO #TMP4 FROM #TMP--选择有DR_273不相同的记录SELECT distinct DR_250,DR_251,DR_252,DR_260,DR_274 INTO #TMP5 FROM #TMP--选择有DR_274不相同的记录--第三步:合并不停记录,并用逗号隔开select DR_250,DR_251,DR_252,DR_260,(select ',' + DR_208 from #TMP1 as A where B.DR_260 = A.DR_260 AND B.DR_251 = A.DR_251 AND B.DR_250 = A.DR_250 AND B.DR_252 = A.DR_252  for XML path('')) AS DR_208 INTO #TMP1_1 from #TMP1 as BGROUP BY DR_250,DR_251,DR_252,DR_260select DR_250,DR_251,DR_252,DR_260,(select ',' + DR_234 from #TMP2 as A where B.DR_260 = A.DR_260 AND B.DR_251 = A.DR_251 AND B.DR_250 = A.DR_250 AND B.DR_252 = A.DR_252  for XML path('')) AS DR_234 INTO #TMP2_2 from #TMP2 as BGROUP BY DR_250,DR_251,DR_252,DR_260select DR_250,DR_251,DR_252,DR_260,--数值类型需要转换convert(nvarchar(3),DR_254)(select ',' + convert(nvarchar(3),DR_254) from #TMP3 as A where B.DR_260 = A.DR_260 AND B.DR_251 = A.DR_251 AND B.DR_250 = A.DR_250 AND B.DR_252 = A.DR_252  for XML path('')) AS DR_254 INTO #TMP3_3 from #TMP3 as BGROUP BY DR_250,DR_251,DR_252,DR_260select DR_250,DR_251,DR_252,DR_260,(select ',' + DR_273 from #TMP4 as A where B.DR_260 = A.DR_260 AND B.DR_251 = A.DR_251 AND B.DR_250 = A.DR_250 AND B.DR_252 = A.DR_252  for XML path('')) AS DR_273INTO #TMP4_4 from #TMP4 as BGROUP BY DR_250,DR_251,DR_252,DR_260select DR_250,DR_251,DR_252,DR_260,(select ',' + DR_274 from #TMP5 as A where B.DR_260 = A.DR_260 AND B.DR_251 = A.DR_251 AND B.DR_250 = A.DR_250 AND B.DR_252 = A.DR_252  for XML path('')) AS DR_274 INTO #TMP5_5 from #TMP5 as BGROUP BY DR_250,DR_251,DR_252,DR_260--第四步:连接获取所有记录SELECT T1.DR_250,T1.DR_251,T1.DR_252,T1.DR_260,T1.DR_208,T2.DR_234,t3.DR_254,T4.DR_273,T5.DR_274 INTO #TMP_F FROM #TMP1_1  T1LEFT JOIN #TMP2_2 T2 ON T2.DR_260 = T1.DR_260 AND T2.DR_251 = T1.DR_251 AND T2.DR_250 = T1.DR_250 AND T2.DR_252 = T1.DR_252LEFT JOIN #TMP3_3 T3 ON T3.DR_260 = T1.DR_260 AND T3.DR_251 = T1.DR_251 AND T3.DR_250 = T1.DR_250 AND T3.DR_252 = T1.DR_252LEFT JOIN #TMP4_4 T4 ON T4.DR_260 = T1.DR_260 AND T4.DR_251 = T1.DR_251 AND T4.DR_250 = T1.DR_250 AND T4.DR_252 = T1.DR_252LEFT JOIN #TMP5_5 T5 ON T5.DR_260 = T1.DR_260 AND T5.DR_251 = T1.DR_251 AND T5.DR_250 = T1.DR_250 AND T5.DR_252 = T1.DR_252--第五步:去掉开头逗号,得到最终结果SELECT DR_250,DR_251,DR_252,DR_260,SUBSTRING(DR_234, 2, Len(DR_234)-1) DR_234 ,SUBSTRING(DR_254, 2, Len(DR_254)-1) AS DR_254 ,SUBSTRING(DR_273, 2, Len(DR_273)-1) AS DR_273 ,SUBSTRING(DR_274, 2, Len(DR_274)-1) AS DR_274 ,SUBSTRING(DR_208, 2, Len(DR_208)-1) AS DR_208 FROM #TMP_F WHERE ISNULL(DR_260, '')<>''--第六步:删临时表DROP TABLE #TMPDROP TABLE #TMP1DROP TABLE #TMP2DROP TABLE #TMP3DROP TABLE #TMP4DROP TABLE #TMP5DROP TABLE #TMP_FDROP TABLE #TMP1_1DROP TABLE #TMP2_2DROP TABLE #TMP3_3DROP TABLE #TMP4_4DROP TABLE #TMP5_5
                                                                                                                                                                    
代码看起来确实非常凌乱,这确实是我本身的原因,但是还是希望对大家有所帮助,也是我自己的一个知识积累,希望下次遇到的时候能够更快的实现

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子特别怕老师怎么办 孩子跟老师认生怎么办 和搭班老师不合怎么办 学生厌学了老师怎么办 孩子很怕我怎么办 斗米报名之后怎么办 孩子鼻子长疮怎么办 六年级孩子不爱学习怎么办 孩子不要爱学习怎么办? 孩子说不愿意读书怎么办 孩子三天没吃饭怎么办 孩子三天不吃饭怎么办 初中学生不爱学习怎么办 孩子写字头歪怎么办 学习习惯差该怎么办 孩子沉迷网络游戏家长怎么办 二年级贪玩厌学怎么办 孩子太注重外表怎么办 宝宝老爱摔跟头怎么办 小孩很讨厌你怎么办 初二作业没写完怎么办 初中孩子上课困怎么办 老师不搭理孩子怎么办 心里纠结一件事怎么办 孩子不喜欢吃蔬菜怎么办 孩子不愿练钢琴怎么办 孩子不愿练琴怎么办 孩子和老师吵架怎么办 学生老顶撞老师怎么办? 小孩不喜欢吃蔬菜水果怎么办 孩子不愿意学琴怎么办 不喜欢吃水果蔬菜怎么办 小孩不喜欢吃水果怎么办 校长想整老师怎么办 和老师吵架了怎么办 孩子初中转学学籍怎么办 孩子上初中学籍怎么办 18孩子不想上学怎么办 宝宝不爱吃蔬菜怎么办 孩子总丢东西怎么办 孩子经常丢东西怎么办