行列转换时的限制条件

pandev92 2014-10-20 08:47:44
现在库里有A,B 2张表,通过交叉连接的表在进行行列转换,结果显示出了多条生产线的记录,我现在想加个限制条件,只想查出1#生产线的记录,应该加在哪里?,下面是我的代码
declare @sql varchar(8000)
set @sql = 'select A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti as 生产线'
select @sql = @sql + ' ,SUM(case MaterialCode when ''' + MaterialCode + ''' then ActualQuality else 0 end) [' + MaterialCode + ']'
from (select distinct MaterialCode from B) as a
set @sql = @sql + ' from A LEFT JOIN B ON A.Unti=B.Unti AND A.RecordID=B.RecordID group by A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti'
exec(@sql)
...全文
133 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 18 楼 alimake 的回复:
我知道了 是因为你这里外面有引号 需要转义。 WHERE UNTI='’1#'’ 用这个
谢谢前辈,照这样解决了
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 15 楼 ky_min 的回复:
set @sql = @sql + ' from (select * from A WHERE UNTI=‘’1#‘’) A LEFT JOIN PR_Batch B ON A.Unti=B.Unti AND A.RecordID=B.RecordID  '
要两个单撇号
谢谢前辈,这样解决了
xiaodongni 2014-10-20
  • 打赏
  • 举报
回复
我知道了 是因为你这里外面有引号 需要转义。 WHERE UNTI='’1#'’ 用这个
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 14 楼 pandev92 的回复:
[quote=引用 13 楼 alimake 的回复:] 没有这么奇妙。你把根据我6楼修改的代码 PRINT 出来 然后复制执行下看看报错不。这么报错。 报错语句贴出来看看。
set @sql = @sql + ' from (select * from A WHERE UNTI='1#') A LEFT JOIN PR_Batch B ON A.Unti=B.Unti AND A.RecordID=B.RecordID  '
报错是'1' 附近有语法错误。
set @sql = @sql + ' from (select * from A WHERE UNTI=1#) A LEFT JOIN PR_Batch B ON A.Unti=B.Unti AND A.RecordID=B.RecordID  '
'#' 附近有语法错误。[/quote] 谢谢,这下解决了
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 13 楼 alimake 的回复:
没有这么奇妙。你把根据我6楼修改的代码 PRINT 出来 然后复制执行下看看报错不。这么报错。 报错语句贴出来看看。
一开始我想到的办法是
select @sql = @sql + ' ,SUM(case MaterialCode when ''' + MaterialCode + ''' then ActualQuality else 0 end) [' + MaterialCode + ']'
 from (select distinct MaterialCode from B) as a
改成
select @sql = @sql + ' ,SUM(case MaterialCode when ''' + MaterialCode + ''' then ActualQuality else 0 end) [' + MaterialCode + ']'
 from (select distinct MaterialCode from B right join A on A.Unti=B.Unti AND A.RecordID=B.RecordID ) as a
SQL提示命令已成功执行,但是不会返回任何结果,这是什么原因额
还在加载中灬 2014-10-20
  • 打赏
  • 举报
回复
set @sql = @sql + ' from (select * from A WHERE UNTI=‘’1#‘’) A LEFT JOIN PR_Batch B ON A.Unti=B.Unti AND A.RecordID=B.RecordID  '
要两个单撇号
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 13 楼 alimake 的回复:
没有这么奇妙。你把根据我6楼修改的代码 PRINT 出来 然后复制执行下看看报错不。这么报错。 报错语句贴出来看看。
set @sql = @sql + ' from (select * from A WHERE UNTI='1#') A LEFT JOIN PR_Batch B ON A.Unti=B.Unti AND A.RecordID=B.RecordID  '
报错是'1' 附近有语法错误。
set @sql = @sql + ' from (select * from A WHERE UNTI=1#) A LEFT JOIN PR_Batch B ON A.Unti=B.Unti AND A.RecordID=B.RecordID  '
'#' 附近有语法错误。
xiaodongni 2014-10-20
  • 打赏
  • 举报
回复
没有这么奇妙。你把根据我6楼修改的代码 PRINT 出来 然后复制执行下看看报错不。这么报错。 报错语句贴出来看看。
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 10 楼 alimake 的回复:
字符串 肯定是unti='1#‘ 报错啥? 你单独运行下 select * from a where unit='1#' 看看这个报错不
select * from a where unit='1#' 单独运行不报错额,包括行列转换运行都不报错,但是不管在哪加上限制条件要么不起作用,要么就报语法错误
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 8 楼 alimake 的回复:
试试我6楼的代码。不行把你的A B表的字段意义大概说下。
A表(记录生产一次的任务单、顾客等基本信息) GkID 生产机上的ID RecordID 任务单ID Unti 生产线 OrderNo 合同编号 Customer 工程 Project 项目 B表(记录材料消耗) RecordID 任务单ID Unti 生产线 MaterialCode 材料代码 ActualQuality 实际用量 两表通过RecordID 和Unti相关联 我把这个写在存储过程中,要求可以根据Unti 生产线,OrderNo 合同编号,Customer 工程 组合起来查询,3个都是字符串类型,2张表除了实际用量是float,其余字段全是nvarchar
xiaodongni 2014-10-20
  • 打赏
  • 举报
回复
字符串 肯定是unti='1#‘ 报错啥? 你单独运行下 select * from a where unit='1#' 看看这个报错不
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 8 楼 alimake 的回复:
试试我6楼的代码。不行把你的A B表的字段意义大概说下。
我的生产线是字符型的额,输入unti=1#或者unti=’1#‘都是语法出错
xiaodongni 2014-10-20
  • 打赏
  • 举报
回复
试试我6楼的代码。不行把你的A B表的字段意义大概说下。
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 5 楼 alimake 的回复:
把你的表结构发一下。 大概说下 你这里用到的列是那些
A表(记录生产一次的任务单、顾客等基本信息) GkID RecordID Unti OrderNo Customer Project B表(记录材料消耗) RecordID Unti MaterialCode ActualQuality 两表通过RecordID 和Unti相关联
xiaodongni 2014-10-20
  • 打赏
  • 举报
回复

set @sql = @sql + ' from A LEFT JOIN B ON A.Unti=B.Unti AND A.RecordID=B.RecordID group by A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti' 
换成
set @sql = @sql + ' from (select * from a where a.unit=1)as a  LEFT JOIN B ON A.Unti=B.Unti AND A.RecordID=B.RecordID group by A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti' 
试试。
xiaodongni 2014-10-20
  • 打赏
  • 举报
回复
把你的表结构发一下。 大概说下 你这里用到的列是那些
xiaodongni 2014-10-20
  • 打赏
  • 举报
回复
能不能转换下 把这个条件转换下 加个GROUP BY 后面换成 HAVING 生产线为1
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
set @sql = @sql + ' from A LEFT JOIN B ON A.Unti=B.Unti AND A.RecordID=B.RecordID WHERE 条件为生产线1 group by A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti' 如上位置 如果B的MaterialCode也和生产线有关 from (select distinct MaterialCode from B WHERE 条件为生产线1) as a 这个地方也可以加
刚刚又试了下,方法1提示语法错误,方法2会返回所有数据
pandev92 2014-10-20
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
set @sql = @sql + ' from A LEFT JOIN B ON A.Unti=B.Unti AND A.RecordID=B.RecordID WHERE 条件为生产线1 group by A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti' 如上位置 如果B的MaterialCode也和生产线有关 from (select distinct MaterialCode from B WHERE 条件为生产线1) as a 这个地方也可以加
这2个地方我都加过试过了,加了之后都是提示命令成功执行但没有返回表额
还在加载中灬 2014-10-20
  • 打赏
  • 举报
回复
set @sql = @sql + ' from A LEFT JOIN B ON A.Unti=B.Unti AND A.RecordID=B.RecordID WHERE 条件为生产线1 group by A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti' 如上位置 如果B的MaterialCode也和生产线有关 from (select distinct MaterialCode from B WHERE 条件为生产线1) as a 这个地方也可以加

34,587

社区成员

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

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