Sql 语句新手,求大神看看呗

木木木子丶 2016-08-15 01:53:57
select line.skucode, --商品名
line.Quantity
from SalesOrderLine line with(nolock) --订单明细
inner join SalesOrder so with(nolock) on line.SalesOrderHeaderId=so.Order_ID --订单
inner join Product p with(nolock) on p.Product_Id=line.ProductId --商品
left join Product_Category ca with(nolock) on ca.Category_Id=p.Category1_Id --商品分类
where so.PlatformType in ('1','5','37') and line.IsDeleted=0 and line.IsRefunded=0
and so.PlatformType=5

------------现在效果----------------

-----------我要的效果-------------




各位大神这样子能实现吗?
...全文
580 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2016-08-15
  • 打赏
  • 举报
回复
构造动态SQL

CREATE TABLE ##tb(sku VARCHAR(100),qty DECIMAL(10,4))
INSERT INTO ##tb(sku,qty)
SELECT '001',1.0000 UNION ALL
SELECT '001',1.0000 UNION ALL
SELECT '123',1.0000 UNION ALL
SELECT '234',1.0000 UNION ALL
SELECT 'qbc',1.0000 UNION ALL
SELECT 'qbc',2.0000
	
DECLARE @sql NVARCHAR(2000),@col NVARCHAR(1000)
SELECT @sql=ISNULL(@sql+',','')+QUOTENAME ( a.rn),@col=ISNULL(@col+',','')+QUOTENAME ( a.rn) +' as ' +QUOTENAME(a.sku)
FROM (
   SELECT ROW_NUMBER()OVER(ORDER BY GETDATE()) AS rn, * FROM ##tb AS t
) AS a
SELECT @sql,@col

SET @sql= 'SELECT '+@col +'
FROM (
   SELECT ROW_NUMBER()OVER(ORDER BY GETDATE()) AS rn, t.qty FROM ##tb AS t
) AS a
PIVOT (MAX(qty) FOR rn IN ('+@sql+')) b'
PRINT @sql
EXEC(@sql)

/*
001	001	123	234	qbc	qbc
1.0000	1.0000	1.0000	1.0000	1.0000	2.0000
*/

中国风 2016-08-15
  • 打赏
  • 举报
回复
生成临时表#1
select  line.skucode,  --商品名
line.Quantity
INTO #1
from SalesOrderLine line with(nolock) --订单明细
inner join SalesOrder so with(nolock) on line.SalesOrderHeaderId=so.Order_ID --订单
inner join Product p with(nolock) on p.Product_Id=line.ProductId   --商品
left join Product_Category ca with(nolock) on ca.Category_Id=p.Category1_Id  --商品分类
where  so.PlatformType in ('1','5','37') and line.IsDeleted=0 and line.IsRefunded=0
and so.PlatformType=5


DECLARE @Str NVARCHAR(max)=''
SET @Str=(SELECT  ','+QUOTENAME('Col'+RTRIM(ROW_NUMBER()OVER(ORDER BY RAND())))+'='''+skucode+'''' FROM #1 FOR XML PATH(''))

SET @Str=STUFF(@Str,1,1,'SELECT ')+STUFF((SELECT ','+QUOTENAME('Col'+RTRIM(ROW_NUMBER()OVER(ORDER BY RAND())))+'='''+RTRIM(ISNULL(Quantity,0))+'''' FROM #1 FOR XML PATH('')),1,1,' UNION ALL SELECT ')

EXEC(@Str)
木木木子丶 2016-08-15
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
你的skucode是不固定的把,可能会有 很多吧,那就只能用动态语句来实现了
对的 这个不固定,应该怎么实现啊?
木木木子丶 2016-08-15
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
skucode ,有两个 001 , 哪个在前,哪个在后面?
这个无所谓,主要是 skucode 这个不固定
木木木子丶 2016-08-15
  • 打赏
  • 举报
回复
对的不固定,那个在前那个在后 那个无所谓
LongRui888 2016-08-15
  • 打赏
  • 举报
回复
你的skucode是不固定的把,可能会有 很多吧,那就只能用动态语句来实现了
卖水果的net 版主 2016-08-15
  • 打赏
  • 举报
回复
skucode ,有两个 001 , 哪个在前,哪个在后面?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧