这么两个需求,大家帮忙下下

54993699 2017-09-26 11:24:49
1、通过多表left join到一个表,每行的数据如下:
货号 价格1 价格2 价格3
001 3 5 4
002 1 2 3

语句标明哪个是最低的列

2、
货号 价格 属性
001 1 1
001 2 0
002 1.5 0
003 3 0

上面同1货号如果是多行,取属性为1的,同1货号是单行取这一行数据
...全文
298 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
顺势而为1 2017-09-26
  • 打赏
  • 举报
回复


--上面同1货号如果是多行,取属性为1的,同1货号是单行取这一行数据

if not object_id(N'Tempdb..#Tmp_Data') is null
    drop table #Tmp_Data
Go

create table #Tmp_Data(
	Item_No	varchar(10),
	Price	decimal(13,2),
	Property int)

INSERT INTO #Tmp_Data
Select '001',1,1 union 
Select '001',2,0 union
Select '002',1.5,0 union
Select '003',3,0 

Select Item_No as '货号',Price as '价格', Property as '属性'
From (
			Select *,Row_No=Row_Number() Over (Partition By Item_No order By Property Desc)
			From #Tmp_Data
	 ) a
Where Row_No=1

(4 row(s) affected)
货号         价格                                      属性
---------- --------------------------------------- -----------
001        1.00                                    1
002        1.50                                    0
003        3.00                                    0

(3 row(s) affected)


二月十六 2017-09-26
  • 打赏
  • 举报
回复
1、
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([货号] nvarchar(23),[价格1] int,[价格2] int,[价格3] int)
Insert #T
select N'001',3,5,4 union all
select N'002',1,2,3
Go
--测试数据结束
SELECT * ,
CASE WHEN 价格1 < 价格2
AND 价格1 < 价格3 THEN '价格1最低'
WHEN 价格2 < 价格1
AND 价格2 < 价格3 THEN '价格2最低'
WHEN 价格3 < 价格1
AND 价格3 < 价格2 THEN '价格3最低'
ELSE '价格1最低'
END AS 最低价格列
FROM #T




2、
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([货号] nvarchar(23),[价格] decimal(18,7),[属性] int)
Insert #T
select N'001',1,1 union all
select N'001',2,0 union all
select N'002',1.5,0 union all
select N'003',3,0
Go
--测试数据结束
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY 货号 ORDER BY CASE WHEN 属性 = 1 THEN 1
ELSE 0
END DESC ) rn
FROM #T
)
SELECT 货号 ,
价格 ,
属性
FROM cte
WHERE rn = 1



OwenZeng_DBA 2017-09-26
  • 打赏
  • 举报
回复
引用 楼主 54993699 的回复:
1、通过多表left join到一个表,每行的数据如下: 货号 价格1 价格2 价格3 001 3 5 4 002 1 2 3 语句标明哪个是最低的列 2、 货号 价格 属性 001 1 1 001 2 0 002 1.5 0 003 3 0 上面同1货号如果是多行,取属性为1的,同1货号是单行取这一行数据
描述不是很清晰,你把需要的效果也描述下
小野马1209 2017-09-26
  • 打赏
  • 举报
回复
3楼回答的能解决你第一个问题, 第二个问题没看懂,能再解释下吗
听雨停了 2017-09-26
  • 打赏
  • 举报
回复
版主正解,应该就是你要的数据吧

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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