Im sử dụng mã từ this MSDN page để tạo tổng hợp do người dùng xác định để nối các chuỗi với group by's
trong máy chủ SQL. Một trong những yêu cầu của tôi là thứ tự của các giá trị được ghép nối giống như trong truy vấn. Ví dụ:Thứ tự tổng hợp được xác định bởi người dùng SQL được giữ nguyên?
Value Group
1 1
2 1
3 2
4 2
Sử dụng truy vấn
SELECT
dbo.Concat(tbl.Value) As Concat,
tbl.Group
FROM
(SELECT TOP 1000
tblTest.*
FROM
tblTest
ORDER BY
tblTest.Value) As tbl
GROUP BY
tbl.Group
sẽ dẫn đến:
Concat Group
"1,2" 1
"3,4" 2
kết quả này dường như luôn luôn đi ra chính xác và như mong đợi, nhưng hơn tôi tình cờ gặp this page mà các tiểu bang rằng đơn đặt hàng không được bảo đảm và thuộc tính đó SqlUserDefinedAggregateAttribute.IsInvariantToOrder
chỉ được sử dụng để sử dụng trong tương lai.
Vì vậy, câu hỏi của tôi là: Có đúng không khi giả định rằng các giá trị được ghép nối trong chuỗi có thể kết thúc theo bất kỳ thứ tự nào?
Nếu trường hợp đó xảy ra thì tại sao mã ví dụ trên trang MSDN sử dụng thuộc tính IsInvariantToOrder
?
Không thể trả lời câu hỏi của bạn MS, nhưng 'GROUP_CONCAT' cho phép bạn xác định được về nối. –
@kerrek - lưu ý rằng thẻ này được gắn thẻ 'SQL Server' không phải' MySQL' – JNK
Tôi e rằng không có 'GROUP_CONCAT' trong SQL server 2008 – Magnus