大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
select t1.shop,sum(t1.qty) as qty,t2.sum_qty from 表名 as t1,
专注于为中小企业提供成都网站设计、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业武威免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
(select sum(qty) as sum_qty from 表名) as t2
group by t1.shop,t2.sum_qty
时间条件你自己加一下吧,应该没问题吧?
这里假设表格为:一个类型表和一个新闻表,取出类型表中的每个新闻类型都查出新闻表中属于该类型的最新的前10条
select 标题,编号,时间,类型编号,类型名称 from
( select
RANK()OVER(PARTITION BY 新闻表.类型编号 ORDER BY 新闻表.时间 DESC) AS
RANK2, 标题,编号,时间,新闻表.类型编号,类型名称 from
新闻表 left join 类型表 On 新闻表.类型编号 = 类型表.类型编号) T
where RANK2=10
CREATE TABLE #test(
itemCode VARCHAR(10),
itemAmount INT
);
go
INSERT INTO #test
SELECT '1010001', 1000 UNION ALL
SELECT '1010002', 500 UNION ALL
SELECT '1010003', 700 UNION ALL
SELECT '1010004', 200 UNION ALL
SELECT '1010005', 1300 UNION ALL
SELECT '1010006', 1200 UNION ALL
SELECT '1010007', 100 UNION ALL
SELECT '1010008', 600 UNION ALL
SELECT '1010009', 800 UNION ALL
SELECT '1010010', 700 UNION ALL
SELECT '1010011', 500 UNION ALL
SELECT '1010012', 1000 UNION ALL
SELECT '1010013', 300 UNION ALL
SELECT '1010014', 400 UNION ALL
SELECT '1010015', 900 UNION ALL
SELECT '1010016', 800 UNION ALL
SELECT '1010017', 200 UNION ALL
SELECT '1010018', 100 UNION ALL
SELECT '1010019', 1100 UNION ALL
SELECT '1010020', 1200;
go
With MyCte AS
(
SELECT
ROW_NUMBER() OVER( ORDER BY itemAmount DESC ) AS NO,
t.itemCode,
t.itemAmount
FROM
#test t
)
SELECT
itemCode,
itemAmount,
STR( 100 * itemAmount / tSum.itemAmountSum, 5, 2) + '%' AS [占比],
CASE
WHEN (SELECT SUM(itemAmount) FROM MyCte M2 WHERE M2.NO = MyCte.NO ) / tSum.itemAmountSum = 0.5 THEN 'A'
WHEN (SELECT SUM(itemAmount) FROM MyCte M2 WHERE M2.NO = MyCte.NO ) / tSum.itemAmountSum 0.5
AND (SELECT SUM(itemAmount) FROM MyCte M2 WHERE M2.NO = MyCte.NO ) / tSum.itemAmountSum 0.8 THEN 'B'
ELSE 'C' END AS [类别]
FROM
MyCte,
(SELECT SUM(itemAmount) * 1.0 AS itemAmountSum FROM #test) tSum
ORDER BY
MyCte.itemAmount DESC;
itemCode itemAmount 占比 类别
---------- ----------- ------ --
1010005 1300 9.56% A
1010006 1200 8.82% A
1010020 1200 8.82% A
1010019 1100 8.09% A
1010001 1000 7.35% A
1010012 1000 7.35% A
1010015 900 6.62% B
1010016 800 5.88% B
1010009 800 5.88% B
1010010 700 5.15% B
1010003 700 5.15% B
1010008 600 4.41% C
1010002 500 3.68% C
1010011 500 3.68% C
1010014 400 2.94% C
1010013 300 2.21% C
1010017 200 1.47% C
1010004 200 1.47% C
1010007 100 0.74% C
1010018 100 0.74% C
(20 行受影响)
SQL Server 2008 Express 下测试通过.
可用如下方法:
以sqlserver2008r2为例,可以从系统表中sys.objects来取字段。
1、打开SQL Server Managment Studio,并登陆到指定数据库。
2、新建一个查询窗口。
3、使用如下语句:
select name from sys.objects where type='U';
查询结果:
其中name列的内容就是当前登陆用户下的所有表名。
建立表结构如下: CREATE table [dbo].[tmp_Trans]( IDintidentity, PO_NO varchar(20) null, PO_Itemno varchar(20) null, Qty numeric(18,6) null, Trans_Date datetime null, Doc_no varchar(20) null)要求取相同PO_NO按Trans_Date倒序排序的前两条记录。 1.Where子句嵌套SELECT的方式。在嵌套的SELECT语句中可以与主表的字段相关联,达到分类的目的。 这种方式又有三种写法: 1)如果表中有主键,可以用IN的方式。 SELECT * FROM tmp_Trans t WHERE ID IN( SELECT TOP 2 ID FROM tmp_Trans WHERE PO_NO=t.PO_NO ORDER BY Trans_Date DESC)2)如果没有主键,可以用判断在本条记录前有多少条记录的方式。但使用这种方式时如果遇到Trans_Date相同的情况会不准。如当存在Trans_Date最大的记录有三条时,这三条记录都会查出来。 SELECT *FROM tmp_Trans tWHERE (SELECT COUNT(*) FROM tmp_Trans WHERE PO_NO=t.PO_NO AND Trans_DateT.Trans_Date)23)使用CROSS APPLY子句。CROSS APPLY是SQL Server 2005后出来的新功能,用于在表连接时传入参数。 SELECT DISTINCT b.* FROM tmp_Trans a CROSS APPLY(SELECT TOP(2) * FROM tmp_Trans WHERE a.PO_NO=PO_NO ORDER BY Trans_Date DESC) b 2.使用自动生成的Row Number。在使用ROW_NUMBER()时可以用PARTITION BY子句来分组。建议使用这种方式。select * from (
sqlserver(T_SQL):
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
Oracle SQL(P_SQL) 语句可以分为以下几类:
1.数据操作语言语句[Data manipulation language,DML]
2.数据定义语言语句[Data definition language,DDL]
3.事务控制语句[transaction control statement]
4.会话控制语句[session control statement]