使用CTE查询

原创 2007年10月11日 09:27:00

以下是我在csdn的sql server版提问的问题,以及得到的回答

数据库是sql server express 2005的;

表名是table1;
表的结构:productid(产品代码)、price(价格)、discount(折扣)、supplyid(供应商代码)
主键是productid+supplyid

表的内容:
productid price discount supplyid
0001 0.5 0.02 1
0001 0.4 0.03 2
0001 0.4 0.01 3
0002 1 0 1
0002 0.8 0 2
0002 0.9 0 3
0003 0.8 0.02 1
0003 0.7 0.01 2
0003 0.8 0.03 3


无论纪录有多少条,supplyid只有3个,即为1,2,3
productid可能有很多,上面的只是例子
寻找一条sql查询语句,要求:
查出每一个productid,discount最小的那一行,对于每个productid,只给出合适的一条纪录
上面那表查询的结果应该为(对于discount一样的,给出任一行就行了)
0001 0.4 0.01 3
0002 1 0 1
0003 0.4 0.01 3

create table table1
(productid
varchar(10), price float, discount float, supplyid int)

insert table1
select '0001', 0.5, 0.02, 1
union all select '0001', 0.4, 0.03, 2
union all select '0001', 0.4, 0.01, 3
union all select '0002', 1, 0, 1
union all select '0002', 0.8, 0, 2
union all select '0002', 0.9, 0, 3
union all select '0003', 0.8, 0.02, 1
union all select '0003', 0.7, 0.01, 2
union all select '0003', 0.8, 0.03, 3

With cte
AS
(
select row_number() over (order by productid, discount) as rowid, productid, price, discount, supplyid
from table1)

select c.productid, c.price, c.discount, c.supplyid from cte c
JOIN
(
select productid, min(rowid) as rowid from cte
group by productid
)t
ON c.productid = t.productid AND c.rowid = t.rowid

C#LINQ查询技术

本课程以实例讲解LINQ(Language Intergrated Query)语言集成查询技术的使用。
  • 2018年01月10日 16:51

CTE和WITH AS短语结合使用提高SQL查询性能

原文链接:  http://database.51cto.com/art/201107/274675_all.htm 如果WITH AS短语所定义的表名被调用两次以上,则优化器会...
  • zxz414644665
  • zxz414644665
  • 2014-02-18 10:41:18
  • 550

SQL With (递归CTE查询)

指定临时命名的结果集,这些结果集称为公用表表达式 (CTE)。该表达式源自简单查询,并且在单条 SELECT、INSERT、UPDATE 或 DELETE 语句的执行范围内定义。该子句也可用在 CRE...
  • u010796790
  • u010796790
  • 2016-07-08 18:50:01
  • 3240

SQL Server CTE 递归查询全解

最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图。数据库中保持的流程数据是树形结构的,表结构及数据如下图: 仔细观察表结构,会发现其树形结构的特点: FFIRSTNODE:标记是否...
  • 3150379
  • 3150379
  • 2017-02-04 20:09:19
  • 4398

SQL Server 2008中的CTE递归查询得到一棵树(按照每颗树的架构排列)

感觉这个CTE递归查询蛮好用的,先举个例子:   [c-sharp] view plain copy  print? use City;   "http://lib.csdn.net...
  • goodyuedandan
  • goodyuedandan
  • 2017-04-17 14:50:38
  • 1420

SQL递归CTE查询(;with xxx as)

with cte as ( select Id,Pid,DeptName,0 as lvl from Department where Id = 2 union all ...
  • qq285679784
  • qq285679784
  • 2016-05-16 09:24:42
  • 856

使用公用表表达式的递归查询(CTE)

简述: 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个...
  • gyc1105
  • gyc1105
  • 2012-10-14 11:29:50
  • 3317

SQLite中使用CTE巧解多级分类的级联查

http://www.cnblogs.com/powertoolsteam/p/sqlite.html 在最近的项目中使用ActiveReports报表设计器设计一个报表模板时,遇到一个多...
  • zdy0_2004
  • zdy0_2004
  • 2017-04-24 15:33:25
  • 835

SQLserver CTE With

  • 2013年12月10日 14:14
  • 1KB
  • 下载

SQLServer CTE递归和循环对比的优势--典型案例

首先,我们新建一张测试用的临时表#country,其中包含三个字段,AreaNam(地名) ,BelongTo(上级地名) ,Msg(地方简介)Create table #country (AreaN...
  • Wikey_Zhang
  • Wikey_Zhang
  • 2017-05-23 14:35:03
  • 1116
收藏助手
不良信息举报
您举报文章:使用CTE查询
举报原因:
原因补充:

(最多只允许输入30个字)