Sql 如何基于rownumber动态创建新列
我在我的表上创建了如下查询:Sql 如何基于rownumber动态创建新列,sql,sql-server,Sql,Sql Server,我在我的表上创建了如下查询: WITH CTE_count as ( select Customer_ID as ID,Brand_Name +'-'+ cast([Sale_Amount] as nvarchar) as brandname,ROW_NUMBER() OVER (PARTITION BY Customer_ID ORDER BY Customer_ID) AS lineNumber from dbo.sheet1 group by Customer_ID,Brand
WITH CTE_count
as
(
select Customer_ID as ID,Brand_Name +'-'+ cast([Sale_Amount] as nvarchar) as
brandname,ROW_NUMBER() OVER (PARTITION BY Customer_ID ORDER BY Customer_ID)
AS lineNumber
from dbo.sheet1
group by Customer_ID,Brand_Name,[Sale_Amount]
)
SELECT ID, brandname,lineNumber
FROM CTE_count;
当我运行此命令时,我得到以下输出:
现在,如何为每个客户ID获取1行,如:
客户id订单1订单2订单3订单4
100000443 AMANA-71.31 AMANA-104.4 AMANA-109.89 AMANA-104.4
如何修改上述查询
我想对每一个ID执行此操作,该行仅作为示例使用您的Cte,do
...
Select cust_id,
max(when lineNumber=1 then brandname end) order1,
max(when lineNumber=2 then brandname end) order2,
max(when lineNumber=3 then brandname end) order3,
max(when lineNumber=4 then brandname end) order4
From Cte_count group by cust_id, brandname
您需要编写动态透视查询以获得结果。
参考链接:
@DancingFool你能在这里给出建议吗?但是我的每个Id都有不同的顺序数。我刚才给出了这4个示例。我想这样做,对于每个Id,你必须“硬编码”你想在select语句中显示的最大列数。如果要显示的项目较少,则最后一列将保持为空。因此,请根据我的模式随意添加一些。我已经在您的解决方案中添加了sc。结果现在被拆分了,但我仍然在不同的行中得到结果,只是如果order1值存在,那么order2,3,4对于4 order customer是空的。在下一排,订单2已经填好了,我知道了,我做错了,谢谢。不要批准我所做的编辑。我试图把它们移走,但没能成功