This topic has been archived. It cannot be replied.
-
工作学习 / 专业技术讨论 / SQL问题又来了, 大侠们请再帮忙:
-poohbear(毛毛熊);
2006-11-2
{926}
(#3299948@0)
-
选择 qty 或 mid(qty_range)的rule是什么?
-digitworm(digitworm);
2006-11-2
(#3300250@0)
-
高手来了.... if qty = 0/null, then mid(qty_range).
-poohbear(毛毛熊);
2006-11-2
(#3300429@0)
-
先用子查询把价格,数量算出来,上层用价格*数量算出金额。把你现在的程序贴出来,看看哪里不满意?
-newkid(newkid);
2006-11-2
(#3300447@0)
-
程序在公司, 在家看不了,而且我根本就没能走到求amount那一步...现在是把qty, qty_range选成一个column, cast为varchar, 所以就不能用*了. 我得把其中的数选出来...
-poohbear(毛毛熊);
2006-11-2
(#3300458@0)
-
SQL SERVER不可以把字符串转换成数值型吗?或者让MID返回数值型(这是自定义函数吧?)
-newkid(newkid);
2006-11-2
(#3300473@0)
-
mid还没定义, 很简单, hard code就行, 比如mid(5, 10) = (5+10)/2 = 7. 问题是, 怎么样从5-10中得到5和10两个数, 我倒是想过用函数, 但是SQL/TSQL没有数列可用, at loss....
-poohbear(毛毛熊);
2006-11-2
(#3300498@0)
-
解析一下不难吧,QTY_RANGE有多少种格式?SQLSERVER支持正则表达式吗?
-newkid(newkid);
2006-11-2
(#3300536@0)
-
只有两种 "5 - 10" 和 "5 plus". 我目前没查到tsql能split string. 正在看能不能用regular express...
-poohbear(毛毛熊);
2006-11-2
(#3300546@0)
-
只有两种?HARDCODE就很好了,还解析个啥……
-newkid(newkid);
2006-11-2
(#3300571@0)
-
我没说清楚, 5 - 10 和 50 - 100 算是一种...
-poohbear(毛毛熊);
2006-11-2
(#3300574@0)
-
我查到了TSQL的charindex和patindex, 好象可以用...
-poohbear(毛毛熊);
2006-11-2
(#3300582@0)
-
you got it.
-digitworm(digitworm);
2006-11-2
(#3300613@0)
-
if qty_range looks like '5 plus', how to calculate the mid(qty_range)?
-digitworm(digitworm);
2006-11-3
(#3300727@0)
-
纠正一个错误, qty是int, 不是decimal (我怎么糊涂了)
-poohbear(毛毛熊);
2006-11-2
(#3300481@0)
-
try thisSELECT
id,
IsNull(IsNull(IsNull(price1, price2),price3),0) AS price,
IsNull(qty, mid(qty_range)) AS qty
IsNull(IsNull(IsNull(price1, price2),price3),0) * IsNull(qty, mid(qty_range)) AS amount
FROM <your_table>
Note:
要实现Mid() 函数,需要细化qty_rangeg规则.
-digitworm(digitworm);
2006-11-2
{275}
(#3300497@0)
-
果然高, 精炼! 只是,IsNull(qty, mid(qty_range)) AS qty可能不行, 因为这两列的type不一样...(我下午用case的时候, DB给了错...)
-poohbear(毛毛熊);
2006-11-2
(#3300509@0)
-
我明白了, 你是让我自己定义mid的时候, 把qty_range转化为int. 有些眉目了, 只是不知道TSQL能不能实现....搜ING...
-poohbear(毛毛熊);
2006-11-2
(#3300518@0)
-
Y
-digitworm(digitworm);
2006-11-2
(#3300602@0)
-
改进一下。先用NullIf(qty,0) 把0转成Null, 再用IsNull()选择不同的qty or mid(qty_range).SELECT
id,
IsNull(IsNull(IsNull(price1, price2),price3),0) AS price,
IsNull(NullIf(qty, 0), mid(qty_range)) AS qty
IsNull(IsNull(IsNull(price1, price2),price3),0) * IsNull(NullIf(qty, 0), mid(qty_range)) AS amount
FROM <your_table>
Note:
IsNull(NullIf(qty, 0), mid(qty_range)) ==>
------------------------------------------------
IF qty = 0 THEN
qty = Null
IF qty = NULL Then
qty = mid (qty_range)
剩下的就是定义mid()函数了
------------------------------------------------
-digitworm(digitworm);
2006-11-2
{502}
(#3300599@0)
-
Great. Thanks!!! 再SIGH一下: 什么时候我也能写出这么漂亮的CODE...
-poohbear(毛毛熊);
2006-11-2
(#3300617@0)
-
you are on the right track!
-digitworm(digitworm);
2006-11-3
(#3300648@0)
-
多谢digitworm和newkid两位大侠! digitworm写的query我想我现在是怎么也写不出来的, 言简意赅. 我明天就根据这个框架, 用regular express试试...
-poohbear(毛毛熊);
2006-11-2
(#3300589@0)