0
我已經要求我在那裏轉換行值成列,但我嘗試刪除空行和只顯示數據如何刪除兩列空值,只顯示數據
declare @t table (id int,keys varchar(10),val varchar(10))
insert into @t (id,keys,val)values (1,'name','hulk'),(2,'age','22'),(3,'name','ironman'),(4,'age','35')
;with CTE AS (
Select [name],CAST([age] AS INT)age from (
select id,keys,val from @t)t
PIVOT(MAX(val) for KEYS in ([name],[age]))P
GROUP BY [name],age)
Select (C.name),(C.AGE) from CTE C
LEFT JOIN CTE cc ON c.age = cc.age AND c.name = cc.name
結果:
name AGE
NULL 22
NULL 35
hulk NULL
ironman NULL
所需的結果集:
name AGE
hulk 22
ironman 35
你怎麼知道誰是22,誰是35? – dasblinkenlight
你的桌子總是2個屬性,名稱和年齡?或者我們總是可以假設age屬性緊跟在name屬性之後?你能改變桌子的設計嗎? – Sparky
SELECT name,age FROM
回答
我認爲,原來按行表的設計是由缺乏有缺陷另一個人的身份。例如,除了名稱,年齡和行標識之外,SSN或任何唯一的人員標識符鍵。
來源
2015-06-13 03:14:11
這是一個非常有效的觀點,但不是問題的答案。通常,用戶不能更改表格結構,儘管我希望在這個例子中不是這種情況.... – Sparky
你的數據結構相當有缺陷,因爲它沒有人的身份。
如果你認爲「名」開頭的每個記錄,有一些東西,你可以這樣做:
這非常依賴於
id
編碼記錄的排序(如您的樣本數據的事實)。如果可能的話,我建議你加入另一個標識符。編輯:
的SQL Server 2012版本前的等效查詢:
來源
2015-06-13 03:19:09
我如何處理這個上面的查詢情況我知道我們可以在總結和最大案例中處理,但是在透視中我們將如何實現它@gordon – mohan111
我已經嘗試了您的上述查詢,它顯示錯誤的語法消息接近訂單 – mohan111
@ mohan111。 。 。你使用的是什麼版本的SQL Server?自SQL Server 2012以來,累積的總和已被支持。您可以使用'cross apply'做類似的事情。 –
我與戈登同意,數據結構是有缺陷的。但是,如果您始終可以假設年齡密鑰ID在名稱密鑰ID後面加1,則以下內容將起作用。但是,如果你可以改變表結構,那就更好了..
但是,代碼可能依賴於有關密鑰的一個壞的假設......
來源
2015-06-13 03:27:36 Sparky
謝謝@sparky我得到了結果集,但你可以建議我在上面的樞軸查詢 – mohan111
如果我猜測正確,你想關於名字和年齡的透視圖,以及數據的不尋常格式。你可以做的是將數據關聯起來,如
name:hulk
和age:22
等等。所以你可以做的是:一旦關係創建,你會得到所需的輸出。我通過輸入Id爲
name:hulk
和age:22
來創建關係,輸入的數據是Id:1
中輸入的數據,也可以是您在應用程序中使用此數據定義的任何對象。來源
2015-06-13 05:47:41 debatanu
Id爲什麼你已經改變Id列到你的要求? – mohan111
「Id」列的值指定數據用於相同的「Id」。這意味着當你分別輸入'name'和'age'到兩個不同的行時,你需要兩個數據之間的關係。主要是在這裏你說的是,兩個不同的條目是同一個人'綠巨人'或'鐵人'。這個關係需要用一些公共密鑰來指定。因此,'Id'。 – debatanu
相關問題