我需要能夠查詢SharePoint數據庫的調查結果。我遇到問題的數據類型是「評分等級」值。因此,每個表格列中的數據代表了一整組子問題及其答案。T-SQL:分析字符串與多個分隔符
所以下面的是什麼是在一列中找到一個例子:
1.我們的函數定義了可用性是如何測量在生產中的硬件/軟件;#3#2。我們的功能(例如SLA)存在可用性閾值水平;#3#3。我們的功能在出現閾值違規時遵循定義的流程;#4#4。我們的功能收集並維護可用性數據;#4#5。比較分析有助於識別可用性數據的趨勢;#4#6。操作級別協議(OLA's)指導我們與其他內部團隊的交互;#4#
問題以分號結尾,它們的答案在兩個#號內。所以第一個問題的答案是3.
當我導出調查結果時,它將每個問題的格式設置爲列標題,並將答案設置爲下面單元格中的值,這對於獲得每個問題的平均值問題,並希望能夠從SQL查詢中複製。
但是,如果我可以將查詢結果分成兩列(問題,答案)......我會很激動。
任何幫助表示讚賞。
非常感謝
漢克斯托林斯
*****附錄:**
這是我的版本astander的解決方案......再次感謝!
DECLARE @Table TABLE(
QuestionSource VARCHAR(50),
QA VARCHAR(5000)
)
DECLARE @ReturnTable TABLE(
QuestionSource VARCHAR(50),
Question VARCHAR(5000),
Answer int
)
DECLARE @XmlField XML,
@QuestionSource VARCHAR(50)
INSERT INTO @Table SELECT
'Availability' AS QuestionSource,CONVERT(varchar(5000),ntext1) FROM UserData WHERE tp_ContentType = 'My Survey'
INSERT INTO @Table SELECT
'Capacity' AS QuestionSource,CONVERT(varchar(5000),ntext2) FROM UserData WHERE tp_ContentType = 'My Survey'
--SELECT * FROM @Table
DECLARE Cur CURSOR FOR
SELECT QuestionSource,
CAST(Val AS XML) XmlVal
FROM (
SELECT QuestionSource,
LEFT(Vals, LEN(Vals) - LEN('<option><q>')) Val
FROM (
SELECT QuestionSource,
'<option><q>' + REPLACE(REPLACE(REPLACE(QA,'&','&'), ';#','</q><a>'), '#', '</a></option><option><q>') Vals
FROM @Table
) sub
) sub
OPEN Cur
FETCH NEXT FROM Cur INTO @QuestionSource,@XmlField
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @ReturnTable
SELECT @QuestionSource,
T.split.query('q').value('.', 'nvarchar(max)') question,
T.split.query('a').value('.', 'nvarchar(max)') answer
FROM @XmlField.nodes('/option') T(split)
FETCH NEXT FROM Cur INTO @QuestionSource,@XmlField
END
CLOSE Cur
DEALLOCATE Cur
SELECT * FROM @ReturnTable
在使用該光標之前,我會掏出眼睛!我會在我的回答中使用基於集合的方法。 – 2010-03-04 18:28:21