我想基於一些其他列名在SQL Server查詢中值顯示別名。對於例如動態別名在SQL語句中
SELECT P.Amount AS (CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END)
FROM Person P
我知道上述情況並不正確,但類似這樣的情況會有所幫助。
我想基於一些其他列名在SQL Server查詢中值顯示別名。對於例如動態別名在SQL語句中
SELECT P.Amount AS (CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END)
FROM Person P
我知道上述情況並不正確,但類似這樣的情況會有所幫助。
我不知道,如果你可以添加動態別名,但你應該可以這樣做(如果你只有幾個可能的別名):
SELECT
CASE P.Type WHEN 'Individual' THEN P.Amount ELSE NULL END AS Salary,
CASE P.Type WHEN 'Individual' THEN NULL ELSE P.Amount END AS Profit
FROM
Person p
你需要恢復量爲「金額」,然後返回包含該金額的「類型」的額外列。
i.e.g
SELECT P.Amount, CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END AS AmountType
FROM Person P
「別名」名字是你正在返回數據的整列的名稱。這不可能在「逐行」的基礎上進行更改。
你可以改變一個列名(化名)的唯一方法是動態使用動態SQL建立查詢。但是,這似乎並不是你想要做的。
而那個,甚至是動態的SQL只能爲別名定的查詢的整體選擇一個名字。 – mjv 2009-10-14 15:46:50
沒有做不到的......
SQL返回recorset其只能按每一列一個名稱/別名。
它會選擇哪個名字給出的例子,如果查詢返回的一些記錄是'個人',並且一些是其他類型?
當然,正如幾個響應中所建議的那樣,您可以根據需要修改查詢返回的列的數量併爲每列指定名稱,但處理這樣的結果集可能需要額外的邏輯,這會導致失敗如果有人想額外的邏輯,他/她可能只是選擇的數量和類型和屬性命名,並在這樣的應用水平工作過這些價值觀......
列可以只有一個名稱。如果您的行集只包含一行,那麼您可以首先查看行的「類型」列,然後針對該選擇適當地更改列名稱。如果它包含多行,那根本不可能。
IF 1 = (SELECT COUNT(*) FROM Person P WHERE <where-criteria>) THEN
IF 'Individual' = (SELECT P.Type FROM Person P WHERE <where-criteria>) THEN
SELECT P.Amount AS Salary
FROM Person P
WHERE <where-criteria>
ELSE
SELECT P.Amount AS Profit
FROM Person P
WHERE <where-criteria>
END IF
ELSE
SELECT P.Amount AS SalaryOrProfit
FROM Person P
WHERE <where-criteria>
END IF
我想你可能需要重新檢查你的設計。
+1好點,這實際上可以做他以後的事情。沒想到這個。 – 2009-10-14 15:47:24
謝謝,這絕對是我能得到的最接近的交易 – 2009-10-14 16:03:46