以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  SQL表达式的写法请教  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=90266)

--  作者:ap9709130
--  发布时间:2016/9/8 15:52:00
--  SQL表达式的写法请教

有个表达试为: IIF(产品数量 > 5,产品数量/包装规格,1)  我想生成个新的列,列名为:件数   是根据表达式来决定的,如果产品数量 大于5 则为: 共(产品数量/包装规格)件,否则就是:共件

 

se lect  IIF(产品数量 > 5,共(产品数量/包装规格)件,共1件)  as 件数 from .....  还是

 

在列名中怎么才能引用表达式啊?

 

 


--  作者:有点蓝
--  发布时间:2016/9/8 16:09:00
--  
没明白你的意思。

列表达式和sql是2回事,不能混用

列名只能输入字符,不能用表达式

--  作者:ap9709130
--  发布时间:2016/9/8 16:37:00
--  

有点蓝老师

 

我的意思是,件数列里的内容中如果要用到表达式,要怎么写,上在的例子,列名是:件数   但件数的内容是:共??件,其它??部分为表达式,这种情况要怎么写?


--  作者:ap9709130
--  发布时间:2016/9/8 17:15:00
--  

我可能没写清楚,再写清楚点。

 

有个表达式A, 会根据条件产生一个整数,我现在想生成一个列,列的内容为:共A件,列名为:件数 ,不会写。

 

se lect 共“A”件  as 件数 from {} ...   如果是狐表,应该这样写:共" & A & "件 as 件数,SQL要怎么写?


--  作者:有点蓝
--  发布时间:2016/9/8 17:16:00
--  
IIF(产品数量 > 5,\'共\'+(产品数量/包装规格)+\'件\',\'共1件\')
--  作者:ap9709130
--  发布时间:2016/9/8 22:02:00
--  
试了,会出错。说是整数和字符不能转换。“(产品数量/包装规格)” 这个表达式的结果是整数   试了好久都不行? 如果是狐表 就好处理了,\'共" & (产品数量/包装规格) & "件\'. SQL不会。
--  作者:有点蓝
--  发布时间:2016/9/8 22:19:00
--  
IIF(产品数量 > 5,\'共\'+cstr(产品数量/包装规格)+\'件\',\'共1件\')
--  作者:ap9709130
--  发布时间:2016/9/8 23:06:00
--  

研究了两天的SQL,现在语句没有出现错误,但是很奇怪,产生的表和实际情况不同,有的会多几行,有的不多,不知道怎么回事。请看下图,这是用狐表的方法产生的正确的库存表:

 


图片点击可在新窗口打开查看此主题相关图片如下:正确的.png
图片点击可在新窗口打开查看

 

 

这是用SQL产生的表,第一个产品没有多,但第二个产品就多了5行,后面的也是,有的多了,有的没多,不知道怎么回事?


 


图片点击可在新窗口打开查看此主题相关图片如下:不正确.png
图片点击可在新窗口打开查看

 

SQL的语句如下:

 

s e lect 入库时间,{物料信息表}.产品名称,{物料信息表}.包装规格,{库存明细表1}.产品批号,{库存明细表1}.产品数量,ROUND(票面价,2) as 票面价,IIF(成本价 > 0,ROUND(成本价 + ((s ele ct Sum(报销金额) from {报销明细表} where {报销明细表}.编号标注 = {订单明细表}.订单编号 and 销售 = 0)*{库存明细表1}.实收数量* IIF(成本价> 0,成本价,票面价))/({订单主表}.总金额 * 实收数量),2),ROUND(IIF(((S el ect Sum(报销金额) from {报销明细表} where {报销明细表}.编号标注 = {订单明细表}.订单编号 And 销售 = 0)*{库存明细表1}.实收数量* IIF(成本价> 0,成本价,票面价))/({订单主表}.总金额 * 实收数量)> 0,票面价 + ((S el ect Sum(报销金额) from {报销明细表} where {报销明细表}.编号标注 = {订单明细表}.订单编号 And 销售 = 0)*{库存明细表1}.实收数量* IIF(成本价> 0,成本价,票面价))/({订单主表}.总金额 * 实收数量),票面价),2)) as 成本价,IIF(成本价> 0,ROUND(成本价 * {库存明细表1}.产品数量,2),ROUND(票面价*{库存明细表1}.产品数量,2)) AS 库存金额,{订单明细表}.外币,{库存明细表1}.仓库名称,IIF({库存明细表1}.产品数量/{物料信息表}.包装系数> 1,ROUND({库存明细表1}.产品数量/{物料信息表}.包装系数,0),1) As 件数,{库存明细表1}._Identify FROM ((({库存明细表1} INNER JOIN {物料信息表} ON {库存明细表1}.MID = {物料信息表}._Identify) INNER JOIN {订单明细表} ON {库存明细表1}.订单编号 = {订单明细表}._Identify) INNER JOIN {报销明细表} ON {订单明细表}.订单编号 = {报销明细表}.编号标注) INNER JOIN {订单主表} ON {订单明细表}.订单编号 = {订单主表}._Identify  where {库存明细表1}.所属公司 = \'aa\' And {库存明细表1}.产品数量 > 0 ORDER BY 产品名称,入库时间

希望高指点,不胜感激!


--  作者:有点蓝
--  发布时间:2016/9/8 23:12:00
--  
除非导数据出来测试,否则没有办法判断
--  作者:ap9709130
--  发布时间:2016/9/8 23:20:00
--  

数据里第一个表是对的,第二个表里重复的都是多出来的。

 

像这类的SQL语句,怎么会生成克隆行呢?真奇怪!