2010-03-19 105 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