我的表格包含以下示例记录。
select value, FieldID
from [values]
where fieldid in (140996, 140997)
输出:
value Fieldid
--------------
101 140996
102 140996
140996
Louis 140997
Khan 140997
Akabar 140997
我想将行中的上面的值显示为列,例如fieldid是输入参数,而Value列中没有任何行。
样本输出
Fieldid value1 value2 value3
---------------------------------
140996 101 102
140997 Louis Khan Akabar
答案 0 :(得分:1)
您可以尝试使用条件聚合函数make pivot。
;WITH CTE AS(
SELECT *,ROW_NUMBER() OVER(PARTITION BY FieldId ORDER BY FieldId) rn
FROM [values]
)
SELECT FieldId,
MAX(CASE WHEN rn = 1 THEN value END),
MAX(CASE WHEN rn = 2 THEN value END),
MAX(CASE WHEN rn = 3 THEN value END)
FROM CTE
GROUP BY FieldId
编辑
如果要动态创建列。
您可以尝试使用动态数据透视。
使用CTE
递归使行号从最小行到最大行。
然后使用行号写条件聚合函数SQL。
DECLARE @cols AS NVARCHAR(MAX) = '',
@query AS NVARCHAR(MAX);
;WITH CTE AS(
SELECT *,ROW_NUMBER() OVER(PARTITION BY FieldId ORDER BY FieldId) rn
FROM [values]
), CTE2 AS (
SELECT MIN(rn) minID,MAX(rn) maxID
FROM CTE
UNION ALL
SELECT minID + 1,maxID
FROM CTE2
WHERE minID + 1<=maxID
)
SELECT @cols = @cols + 'MAX(CASE WHEN rn ='+ cast(minID as varchar(5)) +' THEN value END) Value'+CAST(minID AS VARCHAR(5))+','
FROM CTE2
set @cols = substring(@cols,0,len(@cols))
set @query = '
;WITH CTE AS(
SELECT *,ROW_NUMBER() OVER(PARTITION BY FieldId ORDER BY FieldId) rn
FROM [values]
)
SELECT FieldId,' + @cols + '
FROM CTE
GROUP BY FieldId'
execute(@query)
答案 1 :(得分:0)
您可以对通过CONCAT和ROW_NUMBER生成的编号列进行PIVOT。
Route::get('/store/shopping-cart', 'onlineStore@showCart');
Route::get('/store/checkout', 'onlineStore@showCheckout');
Route::get('/store/checkout/payment', 'onlineStore@showPayment');
Route::get('/store/checkout/success', 'onlineStore@showPaymentSuccess');
Route::get('/store/checkout/error', 'onlineStore@showPaymentError');
Route::get('/store/{category}', 'onlineStore@showCategory');
Route::get('/store/{category}/{product}', 'onlineStore@showProductDetails');
Route::get('{article}', 'articles@showArticle');
您可以here对其进行测试
请注意,无序的顺序不会保证值的顺序相同。因此,如果表具有主键,则可以按此顺序进行排序。