1
필자는 필자가 적절하게 테이블을 정렬 할 수 있도록 필드를 4 개의 열로 구성된 피벗 테이블로 구문 분석하는 훌륭한 기능을 가지고 있습니다. 내 유일한 문제는 지금도 결과에 표시 할 "텍스트"데이터 형식을 호출하는 쿼리에서 함수를 사용할 수 없다는 것입니다. "spName"을 "text"데이터 유형으로 포함하지 않는 한 쿼리는 올바르게 실행됩니다. 을 캐스팅하고을 변환하려고 시도했지만이 쿼리에서는 기본 제공 함수가 작동하지 않습니다. 감사.텍스트 데이터 유형 및 UDF의 문제점
오류 :
Pivot grouping columns must be comparable. The type of column "spName" is "text", which is not comparable.
쿼리
SELECT title, recID, spName, [1] AS [Col1], [2] AS [Col2],[3] AS [Col3],[4] AS [Col4]
FROM (select title, recID, spName from TestTable) t CROSS APPLY dbo.GetNumbers(title) PIVOT (MAX(num) FOR idx IN ([1], [2],[3],[4])) AS PivotTable ORDER BY Col1
UDF :
CREATE FUNCTION GetNumbers
(
@Numbers NVARCHAR(2000)
)
RETURNS @Results TABLE
(
idx INT IDENTITY(1,1),
num INT
)
AS
BEGIN
DECLARE @NonNumericIndex INT, @NumericIndex INT
SET @NumericIndex = PATINDEX('%[0-9]%',@Numbers)
IF (@NumericIndex > 4) --First Column not there
INSERT INTO @Results VALUES (NULL)
WHILE @NumericIndex > 0
BEGIN
SET @Numbers = RIGHT(@Numbers,LEN(@Numbers)[email protected]+1)
SET @NonNumericIndex = PATINDEX('%[^0-9]%',@Numbers)
IF(@NonNumericIndex = 0)
BEGIN
INSERT
INTO @Results VALUES (@Numbers)
RETURN
END
ELSE
INSERT
INTO @Results VALUES
(LEFT(@Numbers,@NonNumericIndex-1))
SET @Numbers = RIGHT(@Numbers,LEN(@Numbers)[email protected]+1)
SET @NumericIndex = PATINDEX('%[0-9]%',@Numbers)
END
RETURN
END
샘플 데이터
title recid spname
QW 1 RT 309-23-1 1 This is title 1 words
QW 1 RT 29-1 2 this is title 2 desc
QW 1 RT 750-1 3 This is title 3
QW RT 750-1 4 This is title 4 words
멋진 작동! 나는 두 번째 select 문에서 첫 번째 제목 별칭을 호출하고 두 번째 제목 주위에 캐스트 캐스트에서 제목 주위에 캐스트 캐스트를 실행하고있었습니다. – gates