1

我有 3 个表需要从中提取数据,这些数据取决于其他表的结果,因此我尝试使用 if then else 结构并遇到语法错误。就 SQL 专业知识而言,我可能会不知所措。我在第一个 if 附近生成一个语法错误,随后在每个 then 附近生成一个语法错误。这是一个简单的语法错误还是我试图做一些 MS SQL 2000 无法处理的事情?

谢谢您的意见。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
Go
Begin
Declare @vCasinoName varchar(35)
select @vCasinoName = Description from Gen_Casino
Create Table #AG_Report
(Slotnumber int,
 SRID varchar(30), 
SerialNumber varchar(15),
CAsset varchar(30),
Mfr varchar(15),
Denomination numeric(12, 2),
Description varchar(30),
Par real,
EPROMID varchar(15),
EPROMID2 varchar(15),
EPROMIDXL varchar(30),
Jurisdiction varchar(30),
Bios varchar(30),
BootChip varchar(30),
VersionChip varchar(30),
CasinoName varchar(35),
)
insert into #AG_Report
select  s.SlotNumber, 
    s.SerialNumber,
    m.Manufacturer,
s.Denomination,
s.Description,
s.Par,
s.EPROMID,
s.EPROMID2,
if (CF.FieldID = 6) 
        BEGIN
        CF.Value as SRID,
        END
            else if (CF.FieldID = 7)
            BEGIN
            CF.Value as CAsset,
            END
                else if (CF.FieldID = 9)
                BEGIN
                else if (CF.FieldID = 9)
                BEGIN
                CF.value as EPROMIDXL,
                    else if (CF.FieldID = 13)
                    BEGIN
                    CF.Value as Jurisdiction,
                    END
                        else if (CF.FieldID = 11)
                        BEGIN
                        CF.Value as Bios,
                        END
                            else if (CF.FieldID = 12)
                            BEGIN
                            CF.Value as BootChip,
                            END
                                else if (CF.FieldID = 14)
                                BEGIN
                                CF.Value as VersionChip,
                                END
from CDS_Slotmast S, BB_SlotMastCustomField CF,BB_Mfr M,
where S.SlotMast_id = CF.SlotMast_ID
and CF.Revision = S.Revision
and S.Active = "Y"
order by s.Denomination, s,SlotNumber
Select * from #AG_Report
End
4

3 回答 3

0

要详细说明@HABO 所说的内容,而不是在 select 语句中:

if (CF.FieldID = 6) 
        BEGIN
        CF.Value as SRID,
        END
            else if (CF.FieldID = 7)

尝试这个:

CASE 
    WHEN (CF.FieldID = 6) THEN 'SRID' --You can return a value from a field or have another case statement here if you need to.
    WHEN (CF.FieldID = 7)
    ...Continue your code  
    ELSE
    ...If you want an ELSE    
    END --End the case statement
于 2013-09-25T21:29:43.197 回答
0

case 语句是 select 中的 IF 的正确方法,但从您的语句看来,无论 CF.FieldID 的值如何,您总是返回 CF.Value,但试图为该列返回不同的别名。您不能真正做到这一点 - 结果集中的每一行的列别名都必须相同。但在返回数据方面,您可以只在结果集中包含 CF.FieldID 和 CF.Value,然后让应用程序代码完成工作。

于 2013-09-26T14:11:58.990 回答
0

在 SQL Server 中无法在 SELECT 语句中使用 IF。相反,您可以使用 CASE 语句。您也可以使用嵌套案例,在 WHEN 中使用案例

于 2013-09-25T21:30:51.230 回答