任何人都可以幫我解決這個問題嗎?SQL - ORDER BY子句(多個數據在1列中)
如何查詢此:
我的查詢:
`SELECT TOP 1000 [WireID]
,[PadNo]
,[Pattern]
,[Tester]
FROM FROM [WLSystem].[dbo].[TblR8Pure]
ORDER BY LEN(Tester), Tester ASC`
結果:
任何人都可以幫我解決這個問題嗎?SQL - ORDER BY子句(多個數據在1列中)
如何查詢此:
我的查詢:
`SELECT TOP 1000 [WireID]
,[PadNo]
,[Pattern]
,[Tester]
FROM FROM [WLSystem].[dbo].[TblR8Pure]
ORDER BY LEN(Tester), Tester ASC`
結果:
嘗試用下面的查詢。
SELECT TOP 1000 [WireID]
,[PadNo]
,[Pattern]
,[Tester]
FROM FROM [WLSystem].[dbo].[TblR8Pure]
ORDER BY Tester ASC
除了事實這種約會存儲是不好的設計。該查詢將按測試者列的前3個數字對結果進行排序。這通過使用東西來刪除所有剩餘的字符。
SELECT TOP 1000 [WireID]
,[PadNo]
,[Pattern]
,[Tester]
FROM FROM [WLSystem].[dbo].[TblR8Pure]
ORDER BY STUFF(Tester,4,99,'') ASC
Msg 174,Level 15,State 1,Line 6 stuff函數需要4個參數。 – itsMacyAnn
抱歉忘了添加''來替換剩餘的字符,無法再次嘗試。 – LemonC200
您可以使用SUBSTRING和CHARINDEX從逗號分隔字符串得到第一個項目:
SELECT TOP 1000
[WireID],
[PadNo],
[Pattern],
[Tester]
FROM [WLSystem].[dbo].[TblR8Pure]
ORDER BY CAST(
CASE WHEN CHARINDEX(';',[Tester])-1 < 0 THEN REPLACE([Tester],CHAR(13)+CHAR(10),'')
ELSE REPLACE(SUBSTRING([Tester],1,CHARINDEX(';',[Tester])-1),CHAR(13)+CHAR(10),'')
END
as int)
但最好的辦法是將資料標準化,並在1列擺脫逗號分隔值的。
嗨@ gofr1我試圖通過較低的值執行您的查詢,如40是中間的。試着看看我編輯的帖子。謝謝 – itsMacyAnn
我按語句順序添加了cast(... as int)。嘗試此查詢 – gofr1
消息245,級別16,狀態1,行1 將varchar值「100 」轉換爲數據類型爲int時轉換失敗。 – itsMacyAnn
確保包含文本格式的測試數據。答案要容易得多。您也會收到更多有價值的答案。
Simpified測試數據:
CREATE TABLE #TblR8Pure
(
[No] int,
PadNo varchar(10),
Pattern int,
Jumper varchar(100)
)
INSERT #TblR8Pure VALUES
(3, '4_39', 85, '40'),
(3, '4_45', 79, '225 ; 219'),
(3, '4_40', 79, '418 ; 566'),
(3, '4_46', 79, '229 ; 355 ; 320'),
(3, '4_44', 79, '234 ; 362 ; 318'),
(3, '4_55', 79, '1000 ; 1')
下面是溶液的規則:
這裏是解決方案:
SELECT [No], PadNo, Pattern, Jumper FROM
(
SELECT [No], PadNo, Pattern, Jumper, Rec, Value, ROW_NUMBER() OVER (PARTITION BY Rec ORDER BY Value) R FROM
(
SELECT [No], PadNo, Pattern, Jumper, Rec, CONVERT(int, RTRIM(LTRIM(R.value('.', 'varchar(10)')))) Value FROM
(SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) Rec, CONVERT(xml,'<a>'+REPLACE(Jumper, ';', '</a><a>')+'</a>') X FROM #TblR8Pure) T
CROSS APPLY T.X.nodes('a') T2(R)
) T
) T
PIVOT
(MAX(Value) FOR R IN ([1],[2],[3],[4],[5])) P
ORDER BY [1],[2],[3],[4],[5]
請在文本格式的樣本數據,而不是像圖片。 –
將值存儲爲csv不是很好的db設計。你應該改變它 – Jens
@GiorgosBetsos在圖像中呈現樣本結果。 – itsMacyAnn