例如,想象一下如下表
select accountid, createdon from account
73C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:47.000
A7C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:48.000
B7C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:48.000
FBC56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:49.000
CBC66F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:54.000
87C66F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:53.000
53C76F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:55.000
87C76F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:56.000
2ED89924-5CFC-E111-A4F8-005056977FBC 2012-09-11 22:01:51.000
C0D79924-5CFC-E111-A4F8-005056977FBC 2012-09-11 22:01:49.000
Run Code Online (Sandbox Code Playgroud)
然后在2012年1月,该计数是10个帐户
select count(*) from account
Run Code Online (Sandbox Code Playgroud)
假设我在2012年2月有5个新帐户,然后count(*)在2012年2月查询返回15个帐户.如果我在2012年3月有10个新帐户,那么count(*)在2012年3月查询总共会返回35个帐户.
我想得到以下结果
2012-january-10 accounts
2012-febrary-15 accounts
2012-march- 35 accounts
Run Code Online (Sandbox Code Playgroud)
表帐户中的创建日期是日期,
但是如果我这样做的话
select year(createdon), month(createdon), count(*) quantity
from accounts
group by year(createdon), month(createdon)
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
2012-january-10 accounts
2012-febrary-5 accounts
2012-march- 20 accounts
Run Code Online (Sandbox Code Playgroud)
那么如何通过简单的查询获得第一个结果呢?不是循环
我有一个名为MusicTrack的表,其中包含MusicTrackID,TrackName和Duration列.
我正在使用查询:
Select Cast(DateAdd( ms,SUM(DateDiff( ms, '00:00:00', Duration)), '00:00:00' ) as time)
as 'Total duration' from
MusicTrack where MusicTrackID = '1' or MusicTrackID = '3'
Run Code Online (Sandbox Code Playgroud)
此查询将两个选定音乐曲目的持续时间相加,并将其显示在称为总持续时间的临时列中.'Duration'的数据类型为Time,因此我将其转换为整数并再次返回.
我的问题:我可以通过哪种方式调整查询,还包括TrackName字段和运行总持续时间?或者包括临时列以及TrackName列.
这样显示器将具有TrackName和Total duration ......沿着以下行:
TrackName Duration Total duration
Name1 00:03:00 00:03:00
Name2 00:03:01 00:06:01
Run Code Online (Sandbox Code Playgroud)
我试图将TrackName列包含在这样的查询中,但它不起作用:
Select TrackName, Cast(....) From MusicTrack where MusicTrackID = '1' or MusicTrackID = '3'
Run Code Online (Sandbox Code Playgroud) 我有下表(SQL Server 2012):
DID - cust id
GID - order id
AMT - order amt
Gf_Date - order date
SC - order reversal amount
Run Code Online (Sandbox Code Playgroud)
我正在尝试计算客户的连续订单数量和销售总额,以便我可以为客户实现累计销售额$ 1,000的时间点分配标记。第一步,我运行以下查询:
Select
[DID]
, [AMT]
, [Gf_Date]
, COUNT([GID]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [RunningGift_Count]
, SUM([AMT]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [CumlativeTotal]
FROM [dbo].[MCT]
WHERE [SC] is null
ORDER BY [DID]
Run Code Online (Sandbox Code Playgroud)
但是我收到错误消息:
消息102,级别15,状态1,第3行'order'附近的语法不正确
我在较早时发布了此消息,并粘贴了错误的错误消息。遗憾和歉意。您在上面看到的是我得到的结果。有人评论说此语法不正确。现在一切正常,有人可以告诉我我做错了吗?
谁能帮我吗?在任何地方都找不到解决方案!谢谢!
嗨,我在这样的表格中有一个专栏
Amount
1
2
3
4
5
6
7
Run Code Online (Sandbox Code Playgroud)
我希望我的函数或存储过程的结果是这样的
output
--------
1
3
6
10
15
21
28
Run Code Online (Sandbox Code Playgroud)
针对上述专栏请帮我解决这方面的问题
假设我有一个数据表,如下所示:
ItemNo | ItemCount | Proportion
------------------------------------------
1 3 0.15
2 2 0.10
3 3 0.15
4 0 0.00
5 2 0.10
6 1 0.05
7 5 0.25
8 4 0.20
Run Code Online (Sandbox Code Playgroud)
换句话说,总共有20个项目,并且每个ItemNo总和的累积比例为100%.表行的排序在这里很重要.
是否可以执行没有循环或游标的SQL查询来返回超过累积比例的第 ItemNo一个?
换句话说,如果我想要检查的'比例'是35%,那么第一行超过那个ItemNo 3,因为0.15 + 0.10 + 0.15 = 0.40
同样,如果我想找到超过75%的第一行,那就是ItemNo 7,Proportion直到那一行的总和小于0.75.
以下是我正在使用的结果集.我想要的是一个额外的列,它将X行标识为相同.在我的结果集中,第1-4行是相同的(想要标记为1),第5-9行是相同的(标记为2); 第10行(标记为3)
这怎么可能只使用SQL?我似乎无法使用rank或dense_rank函数执行此操作.
ranking diff bool
-------------------- ----------- -----------
1 0 0
2 0 0
3 0 0
4 0 0
5 54 1
6 0 0
7 0 0
8 0 0
9 0 0
10 62 1
Run Code Online (Sandbox Code Playgroud) 说我有下表:
Id Grade 1 Grade 2 Grade 3
1 1 1 1
2 5 0 0
3 3 1 5
Run Code Online (Sandbox Code Playgroud)
我希望结果完全如下:
Id Grade 1 Grade 2 Grade 3 Total
1 1 1 1 3
2 5 0 0 8
3 3 1 5 17
Run Code Online (Sandbox Code Playgroud)
总计应该是当前列+之前总计的总和.
这可能在MYSQL中吗?
我正在尝试将列添加到当前行(在SQL Server中).我该怎么做呢?
select t1.CounterTime,
t1.StartTime,
t1.EndTime,
isNull(t1.value, 0) as value1,
-- How do I make Total1 the sum of t1.value over all previous rows?
sum( isNull(t1.value, 0) ) over (partition by t1.CounterTime order by t1.CounterTime) as Total1
from SomeTable t1
order by t1.CounterTime
Run Code Online (Sandbox Code Playgroud)
但我partition by弄错了......
?????????????????????????????????????????????????????????????????????????????????????????????????????
? ? CounterTime ? StartTime ? EndTime ? value1 ? Total1 ?
?????????????????????????????????????????????????????????????????????????????????????????????????????
? 1 ? 2015-03-17 12:00:00.000 ? 2015-03-17 00:00:00.000 ? 2015-03-18 00:00:00.000 ? 0 ? 0 ?
? 2 ? …Run Code Online (Sandbox Code Playgroud) 我有一个包含两列的表 - 您可以调用下面的表 SalesSummary,例如:
Rank, Sales Dollars
1, $700
2, $200
3, $100
Run Code Online (Sandbox Code Playgroud)
我想编写一个查询来添加新列 - 累计销售百分比:
Rank, Sales Dollars, Cumulative Sales Percentage
1, $700, 70%
2, $200, 90%
3, $100, 100%
Run Code Online (Sandbox Code Playgroud)
关键部分是累积的,例如排名 2 的条目应该是 90%,因为它将 700 美元 + 200 美元加在一起,加上 1000 美元的总额,得到 90%。
有什么建议吗?非常感谢您的帮助!
我在数据库(SQL Server 2005)中有一个总帐表,包含列(ID,Insertion_Date,Invoice_No,Debit,Credit和Balance).
当用户添加一些条目时,他将被给予填写发票号码.和金额(借方)因此余额将自动添加为余额=余额 - 金额.无论如何,在为同一发票设置多行之后,用户决定编辑前一行的金额.编辑金额后,同一行和其他行的余额应自动更改.(如:编辑的行将采用新的金额,如:Balance = Balance - newamount,其他行将采用新余额和sub.及其当前金额).
示例:表格GL
ID Date Invoice_No Debit Credit Balance
---------------------------------------------------------
1 19/3/2014 123456 0 400 400
2 19/3/2014 123456 100 0 300
3 20/3/2014 123456 50 0 250
4 21/3/2014 123456 100 0 150
5 22/3/2014 123456 50 0 100
Run Code Online (Sandbox Code Playgroud)
在使用ID 2编辑行并在借记列上进行更改(而不是100使其为50)之后,其他行将受影响,因此结果应如下所示.
ID Date Invoice_No Debit Credit Balance
---------------------------------------------------------
1 19/3/2014 123456 0 400 400
2 19/3/2014 123456 50 0 350
3 20/3/2014 123456 50 0 300
4 21/3/2014 123456 100 0 …Run Code Online (Sandbox Code Playgroud) 可能重复:
计算SqlServer中的运行总计
我需要在ms-sql server中获取一列的累积(运行)总数.即如果存在名为"Marks"的列,则对应于每行累积和将是当前行和前一行的总和.我们可以在不使用连接的情况下获得结果吗?因为我的查询非常大.
我已经包含了一个示例表和数据:
CREATE TABLE "SCORE_CHART"
(
"STUDENT_NAME" NVARCHAR(20),
"MARKS" INT
)
INSERT INTO SCORE_CHART (STUDENT_NAME, MARKS) VALUES ('STUD1', 95);
INSERT INTO SCORE_CHART (STUDENT_NAME, MARKS) VALUES ('STUD2', 90);
INSERT INTO SCORE_CHART (STUDENT_NAME, MARKS) VALUES ('STUD3', 98);
SELECT STUDENT_NAME, MARKS FROM SCORE_CHART;
Run Code Online (Sandbox Code Playgroud)
预期结果:

在oracle中,它很容易编写如下:
SELECT
STUDENT_NAME,
MARKS,
SUM(MARKS) OVER (ORDER BY STUDENT_NAME) CUM_SUM
FROM SCORE_CHART
ORDER BY STUDENT_NAME;
Run Code Online (Sandbox Code Playgroud)
提前致谢.
sql ×11
sql-server ×10
sum ×2
c# ×1
count ×1
group-by ×1
mysql ×1
partitioning ×1
ssms ×1
t-sql ×1