将SWITCH语句添加到查询

时间:2015-10-13 13:44:16

标签: sql switch-statement ms-access-2007

我继承了另一个陈旧而低效的系统,这个系统使用5位数的项​​目编号,有时使用1,2或3个字母的后缀作为唯一标识符。

以下是此字段中有效项目编号的所有示例。总共使用了20多种不同的后缀。

Item_Num

00001ABC
002ABC
3214
87522ATT
22P
04828P
00421

这使得该领域难以使用,但它是无法改变的东西。它是一个企业级系统,有太多实体使用该领域。对于我正在撰写的查询,我需要将Item_Num的两个部分分成我所称的Raw_NumSuffix。但是由于格式不一致而使这变得困难; VAL()不会抓住"浮动" 0sLEFT()必须抓取2到5个字符。由于这些限制,我开发了以下代码

SELECT 
    Q2.Item_Num,
    SWITCH
        (
        VAL(LEFT(("1" + Q2.Item_Num)),1)=1    ,          LEFT(VAL(Q2.Item_Number),5),
        VAL(LEFT(("1" + Q2.Item_Num)),2)=10   , "0"    + LEFT(VAL(Q2.Item_Number),4),
        VAL(LEFT(("1" + Q2.Item_Num)),3)=100  , "00"   + LEFT(VAL(Q2.Item_Number),3),
        VAL(LEFT(("1" + Q2.Item_Num)),4)=1000 , "000"  + LEFT(VAL(Q2.Item_Number),2),
        VAL(LEFT(("1" + Q2.Item_Num)),5)=10000, "0000" + LEFT(VAL(Q2.Item_Number),1)
        )
        AS Raw_Numb
FROM
    (
    [[SUBQUERY]]
    )
    AS Q2

试图获得

的结果
Item_Num    Raw_Num

00001ABC    00001
002ABC      002
3214        3214
87522ATT    87522
22P         22
04828P      04828
00421       00421

然而,这会导致错误The Microsoft Office Access database engine could not find the object ''。我搜索解决方案已经把我带到了this related question,这让我相信我试图引用一个无名对象。当我知道我可以运行

时,这种混淆加倍
SELECT 
    Q2.Item_Num
FROM
    (
    [[SUBQUERY]]
    )
    AS Q2

获得

的输出
Item_Num

00001ABC
002ABC
3214
87522ATT
22P
04828P
00421

这让我有三个相互关联的问题: 这只是执行不当SWITCH声明的结果吗? 这是因为我以不能使用SWITCH语句的方式使用Q2.Item_Num语句吗? 如果我仅在语句中引用'',我该如何搜索对象typedef struct{ float x; float y; float z; } Point; Point ***Qw; Qw = malloc(num_bezier * sizeof(Point **)); for(i=0; i<num_bezier; i++){ Qw[i] = malloc((m+1) * sizeof(Point *)); for(j=0; j<=m;j++) Qw[i][j] = malloc((p+1) * sizeof(Point)); }

这个Stack有点偏离主题: 有没有更好的方法去做我想做的事情?

0 个答案:

没有答案