2010-03-19 96 views
1

这是我的代码。它给了我一个错误。如何在SQL Server 2005中使用子查询作为别名

select 
b.bill_no as 'Bill Number', 
(select descript from SALE_TERMS where STERMS_CODE='99')=b.[99] 
from BILLDET as b 
+2

什么是它应该这样吗?部分 “9”)= b。[99]“ 对我来说没有任何意义。什么是错误? – TomTom 2010-03-19 11:15:01

+0

错误是,在billdet表中有列名[99],在sale_terms表中有一行[99],我想把[99]的描述值,它应该是列名。 – 2010-03-19 12:07:42

回答

2

为什么不干脆:

SELECT 
    b.bill_no as 'Bill Number', 
    (SELECT descript FROM SALE_TERMS WHERE STERMS_CODE = '99') AS 'Code99' 
FROM 
    BILLDET as b 
1
SELECT 
    b.bill_no as 'Bill Number', 
    ST.[99] 
FROM 
    BILLDET as b 
    CROSS JOIN 
    (SELECT descript AS [99] FROM SALE_TERMS WHERE STERMS_CODE = '99') ST 

还是你meanthis?

SELECT 
    b.bill_no as 'Bill Number', 
    ST.descript 
FROM 
    BILLDET as b 
    JOIN 
    SALE_TERMS st ON b.[99] = ST.STERMS_CODE 
WHERE 
    ST.STERMS_CODE = '99' 
1

你的例子几乎是正确的,除了赋值之外,它应该是一个包含列名的'AS'语句。 此外,它在你的子查询中使用TOP 1件好事,万一STERMS_CODE值不是唯一的:

SELECT 
b.bill_no AS 'Bill Number', 
(SELECT TOP 1 descript from SALE_TERMS WHERE STERMS_CODE='99') AS [99] 
FROM BILLDET AS b 
+0

我想要做的是使用子查询作为列名称而不是行值。你的答案也是这样。 – 2010-03-19 11:48:17

+0

我明白了。您想根据子查询创建一个动态命名的列。这不会以这种方式工作。你能提供一些样本输入和输出数据吗? – Prutswonder 2010-03-19 13:55:25

+0

这是有史以来没有办法。 SQL语句在编译后假定“适当”,即稳定的环境。你可以用动态SQL来做到这一点。但它需要2个查询 - 一个获取字段名称,然后是一些字符串魔术,然后获取数据。 – TomTom 2010-03-19 14:51:10