热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL中行列转换去掉重复列如何操作

--仓库表CREATETABLE#t_Stock(FItemIDINTIDENTITY,FNumberVARCHAR(10),FNameVARCHAR(20))INSERT#t_S

--仓库表
CREATE TABLE #t_Stock (FItemID INT IDENTITY,FNumber VARCHAR(10),FName VARCHAR(20))
INSERT #t_Stock (FNumber,FName) VALUES('1001','原料仓')
INSERT #t_Stock (FNumber,FName) VALUES('1002','半成品仓')
INSERT #t_Stock (FNumber,FName) VALUES('1001','成品仓')
--SELECT * FROM #t_Stock

--物料表
CREATE TABLE #t_ICItem (FItemID INT IDENTITY,FNumber VARCHAR(10),FName VARCHAR(20))
INSERT #t_ICItem (FNumber,FName) VALUES('1001','物料1001')
INSERT #t_ICItem (FNumber,FName) VALUES('1002','物料1002')
INSERT #t_ICItem (FNumber,FName) VALUES('1003','物料1003')
--SELECT * FROM #t_ICItem

--库存表
CREATE TABLE #ICInv (FItemID INT,FStockID INT,FQty DECIMAL(20,8))
INSERT #ICInv (FItemID,FStockID,FQty) VALUES(1,1,20)
INSERT #ICInv (FItemID,FStockID,FQty) VALUES(2,1,30)
INSERT #ICInv (FItemID,FStockID,FQty) VALUES(1,2,50)
--SELECT * FROM #ICInv

declare @sql varchar(8000)
set @sql = 'select fitemid as ' + '物料内码'
select @sql= @sql+' , max (case FStockID when ' + str(FStockID) + ' then Fqty else 0 end ) [' + FName  + ']'
 from (select distinct t1.FItemID,t1.FStockID,t1.FQty ,t2.FName  from #ICInv t1 inner join #t_Stock t2 on t1.FStockID =t2.FItemID ) as a
set @sql = @sql + ' from #ICInv group by fitemid'
execute (@sql) 

物料内码 原料仓        半成品仓           原料仓
1 20.00000000 50.00000000 20.00000000
2 30.00000000 0.00000000 30.00000000


如何去掉重复的列“原料仓”?

请高手赐教!!

5 个解决方案

#1


DECLARE @sql VARCHAR(8000)
SET @sql = 'select fitemid as ' + '物料内码'
SELECT @sql = @sql + ' , max (case FStockID when ' + STR(FStockID) + 
       ' then Fqty else 0 end ) [' + FName + ']'
FROM   (
           SELECT DISTINCT 
                  t1.FStockID,
                  t2.FName
           FROM   #ICInv t1
                  INNER JOIN #t_Stock t2
                       ON  t1.FStockID = t2.FItemID
       ) AS a

SET @sql = @sql + ' from #ICInv group by fitemid'
EXECUTE (@sql) 

#2


select distinct t1.FItemID,t1.FStockID,t1.FQty ,t2.FName  from #ICInv t1 inner join #t_Stock t2 on t1.FStockID =t2.FItemID 

你子查询中的distinct没有起到过滤作用。楼上写的就是OK的

#3


select distinct t1.FItemID,t1.FStockID,t1.FQty ,t2.FName  from #ICInv t1 inner join #t_Stock t2 on t1.FStockID =t2.FItemID 

关键在于这个子查询。这个子查询中关键是要把重复的行去掉,但是你select列表后面的列太多,导致distinct没有把重复的fitemid完全去掉

#4


你可以查查这个是否有重复的原料仓记录

select distinct t1.FItemID,t1.FStockID,t1.FQty ,t2.FName  from #ICInv t1 inner join #t_Stock t2 on t1.FStockID =t2.FItemID

可以看看我的关于行列转换的文章,帮我顶下哈,谢谢
http://blog.csdn.net/dotnetstudio/article/details/9856745

#5


后面这段改成这样就好了

declare @sql varchar(8000)
set @sql = 'select fitemid as ' + '物料内码'
select @sql= @sql+' , max (case FStockID when ' + str(FStockID) + ' then Fqty else 0 end ) [' + FName  + ']'
 from (select distinct t1.FStockID,t2.FName  from #ICInv t1 inner join #t_Stock t2 on t1.FStockID =t2.FItemID ) as a
set @sql = @sql + ' from #ICInv group by fitemid'
execute (@sql) 

推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
author-avatar
丫头片子ZXH
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有