任何人都可以帮我解决这个问题吗?
如何查询:
我的查询:
`SELECT TOP 1000 [WireID]
,[PadNo]
,[Pattern]
,[Tester]
FROM FROM [WLSystem].[dbo].[TblR8Pure]
ORDER BY LEN(Tester), Tester ASC`
结果:
答案 0 :(得分:1)
您可以使用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列中删除逗号分隔值。
答案 1 :(得分:0)
尝试使用以下查询。
SELECT TOP 1000 [WireID]
,[PadNo]
,[Pattern]
,[Tester]
FROM FROM [WLSystem].[dbo].[TblR8Pure]
ORDER BY Tester ASC
答案 2 :(得分:0)
除了事实,这种类型的约会存储是糟糕的设计。此查询将按测试器列的前3个数字对结果进行排序。这通过使用东西来删除所有剩余的字符。
SELECT TOP 1000 [WireID]
,[PadNo]
,[Pattern]
,[Tester]
FROM FROM [WLSystem].[dbo].[TblR8Pure]
ORDER BY STUFF(Tester,4,99,'') ASC
答案 3 :(得分:0)
确保以文本格式包含测试数据。回答要容易得多。您还会收到更多有价值的答案。
简化测试数据:
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]
答案 4 :(得分:0)
答案 5 :(得分:0)