Tsql 在SQL Server中转换MS Access动态列
我想将此MS Access动态查询示例转换为T-SQL:Tsql 在SQL Server中转换MS Access动态列,tsql,ms-access,Tsql,Ms Access,我想将此MS Access动态查询示例转换为T-SQL: SELECT Name, iif(expression='A', value, 0) as vA, iif(expression='B', value, 0) as vB, vA-vB as diff FROM MyTable 我尝试了这段代码,但编译器告诉我表达式vA vB as diff中的新动态列vA和vB无法识别 SELECT Name, CASE WHEN exp
SELECT
Name,
iif(expression='A', value, 0) as vA,
iif(expression='B', value, 0) as vB,
vA-vB as diff
FROM
MyTable
我尝试了这段代码,但编译器告诉我表达式vA vB as diff
中的新动态列vA和vB无法识别
SELECT
Name,
CASE WHEN expression = 'A' then value else 0 end AS vA,
CASE WHEN expression = 'B' then value else 0 end AS vB,
vA-vB as diff
FROM
MyTable
不能使用同一select语句中定义的别名。试试这个
SELECT NAME,
CASE WHEN expression = 'A' THEN value ELSE 0 END AS vA,
CASE WHEN expression = 'B' THEN value ELSE 0 END AS vB,
( CASE WHEN expression = 'A' THEN value ELSE 0 END ) -
( CASE WHEN expression = 'B' THEN value ELSE 0 END ) AS diff
FROM MyTable
或者作为子选择进行查询
,并在外部查询中查找diff
SELECT vA,
VB,
vA - vB AS Diff
FROM (SELECT NAME,
CASE WHEN expression = 'A' THEN value ELSE 0 END AS vA,
CASE WHEN expression = 'B' THEN value ELSE 0 END AS vB
FROM MyTable) A
当行完成处理时,将定义别名。因此,它们在同一行的其他位置的“读取”上下文中不可用。在SELECT
子句中可以使用别名,这是访问的许多特性之一,尽管据我所知,它们必须按顺序定义。这可能很有用,但如果查询中有一个与表字段同名的计算字段,这可能会是一场噩梦。