2014-03-05 43 views
0

希望T-SQL執行以下操作。Sql 2008 R2 - 選擇字段名稱和字段值

我想從字段列表中返回字段名稱和字段數據。

假設我有一張名爲TableX的表格,其中有字段ClientID, Surname, Firstname, Age, Sex。我只想返回ClientID, Surname and Firstname

我想在一個臨時表中的以下內容,然後端詳進一步

+-------------+--------------+------------+ 
| Client ID | FieldName | FieldData | 
+-------------+--------------+------------+ 
| 1   | Surname  | "Smith" | 
| 1   | Firstname | "Andrew" | 
+-------------+--------------+------------+ 
+1

歡迎到StackOverflow。當您卡住時,我們會提供幫助。請努力嘗試自己嘗試。一旦你做出了這個努力,我們可以幫助你。 – Kermit

+0

http://technet.microsoft.com/en-us/library/ms188029.aspx –

+0

今天早上八點半以後,我已經度過了一段時間! – Spectrum

回答

0

您可以使用union這樣的:

// drop the temp table if it exists 
drop table #temptable 

// use select...into to create a temporary table 
select * into #temptable from 
(
    select ClientID, 'Surname' as FieldName, surname as FieldData from YourTable 
    union all 
    select ClientID, 'Firstname' as FieldName, firstname as FieldData from YourTable 
) s 

// display the results... 
select * from #temptable 

其結果將是這樣的:

ClientID FieldName FieldData 
----------- --------- -------------------- 
1   Firstname Andrew 
1   Surname Smith 
+0

如果您知道該聯合的兩個部分都返回不同的行,則最好使用UNION ALL來避免UNION所執行的隱式DISTINCT。 – thepirat000

+0

@ thepirat000是的,的確如此。我會更新我的帖子。謝謝你提醒我。 – jpw

+0

@jpw:謝謝你。我已經爲此掙扎了兩天了!我將如何將這變成一個動態的方面。我有一個我希望返回的FieldName的列表('姓氏','名字','年齡')這個列表是由一個select語句構建的。可能選擇?謝謝。 – Spectrum