各位不好意思,打擾了
我想詢問一下查詢連續資料的問題
有一個欄位是判斷數值有沒有小於標準差,
接著我有三個條件想要查詢:
再麻煩各位幫忙一下,底下是測試資料
GO
/****** Object: Table [dbo].[Test] Script Date: 2021/10/4 下午 03:08:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Test](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Value] [int] NULL,
[StandardDeviation] [int] NULL,
[小於標準差] [int] NULL,
[連續8次] [nvarchar](10) NULL,
[連續2次] [nvarchar](10) NULL,
[五筆內有四筆以上] [nvarchar](10) NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Test] ON
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (1, 5, 10, 1, N'NO', N'NO', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (2, 5, 10, 1, N'NO', N'YES', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (3, 5, 10, 1, N'NO', N'YES', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (4, 5, 0, 0, N'NO', N'NO', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (5, 5, 10, 1, N'NO', N'NO', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (6, 5, 10, 1, N'NO', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (7, 5, 10, 1, N'NO', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (8, 5, 10, 1, N'NO', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (9, 5, 10, 1, N'NO', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (10, 5, 10, 1, N'NO', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (11, 5, 10, 1, N'NO', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (12, 5, 10, 1, N'YES', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (13, 5, 10, 1, N'YES', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (14, 5, 10, 1, N'YES', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (15, 5, 10, 1, N'YES', N'YES', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (16, 5, 0, 0, N'NO', N'NO', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (17, 5, 0, 0, N'NO', N'NO', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (18, 5, 0, 0, N'NO', N'NO', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (19, 5, 0, 0, N'NO', N'NO', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (20, 5, 10, 1, N'NO', N'NO', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (21, 5, 10, 1, N'NO', N'YES', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (22, 5, 10, 1, N'NO', N'YES', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (23, 5, 0, 0, N'NO', N'NO', N'NO')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (24, 5, 10, 1, N'NO', N'NO', N'YES')
GO
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (25, 5, 10, 1, N'NO', N'YES', N'YES')
GO
SET IDENTITY_INSERT [dbo].[Test] OFF
GO
大概是這樣吧~
前提號碼要先連續~才可以用子查詢~
select *
,(
select Sum(case when StandardDeviation > 0 then 1 else 0 end)
from Test b
where b.Id between a.Id - 7 and a.Id
) Num1
,(
case when (
select Sum(case when StandardDeviation > 0 then 1 else 0 end)
from Test b
where b.Id between a.Id - 7 and a.Id
) >= 8
then '連續8次'
else '沒有8次'
end
) Num1Ans
,(
select Sum(case when StandardDeviation > 0 then 1 else 0 end)
from Test b
where b.Id between a.Id - 1 and a.Id
) Num2
,(
case when (
select Sum(case when StandardDeviation > 0 then 1 else 0 end)
from Test b
where b.Id between a.Id - 1 and a.Id
) >= 2
then '連續2次'
else '沒有2次'
end
) Num2Ans
,(
select Sum(case when StandardDeviation > 0 then 1 else 0 end)
from Test b
where b.Id between a.Id - 4 and a.Id
) Num3
,(
case when (
select Sum(case when StandardDeviation > 0 then 1 else 0 end)
from Test b
where b.Id between a.Id - 4 and a.Id
) >= 4
then '四筆以上'
else '沒有四筆'
end
) Num3Ans
from Test a
不好意思,我漏了一個地方,想請問您連續八次的部份,假如是0連續八次或1連續八次都要判斷的話,請問該怎麼處理比較好
就改變加總對象就好~
,(
select Sum(case when [小於標準差] = 0 then 1 else 0 end)
from Test b
where b.Id between a.Id - 7 and a.Id
) Num4
,(
case when (
select Sum(case when [小於標準差] = 0 then 1 else 0 end)
from Test b
where b.Id between a.Id - 7 and a.Id
) >= 8
then '連續8次'
else '沒有8次'
end
) Num4Ans
,(
select Sum(case when [小於標準差] = 1 then 1 else 0 end)
from Test b
where b.Id between a.Id - 7 and a.Id
) Num5
,(
case when (
select Sum(case when [小於標準差] = 1 then 1 else 0 end)
from Test b
where b.Id between a.Id - 7 and a.Id
) >= 8
then '連續8次'
else '沒有8次'
end
) Num5Ans
感謝你
玩一下
CREATE TABLE [dbo].[Test](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Value] [int] NULL,
[StandardDeviation] [int] NULL,
[小於標準差] [int] NULL,
[連續8次] [nvarchar](10) NULL,
[連續2次] [nvarchar](10) NULL,
[五筆內有四筆以上] [nvarchar](10) NULL
) ON [PRIMARY]
;
SET IDENTITY_INSERT [dbo].[Test] ON
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (1, 5, 10, 1, N'NO', N'NO', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (2, 5, 10, 1, N'NO', N'YES', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (3, 5, 10, 1, N'NO', N'YES', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (4, 5, 0, 0, N'NO', N'NO', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (5, 5, 10, 1, N'NO', N'NO', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (6, 5, 10, 1, N'NO', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (7, 5, 10, 1, N'NO', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (8, 5, 10, 1, N'NO', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (9, 5, 10, 1, N'NO', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (10, 5, 10, 1, N'NO', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (11, 5, 10, 1, N'NO', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (12, 5, 10, 1, N'YES', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (13, 5, 10, 1, N'YES', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (14, 5, 10, 1, N'YES', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (15, 5, 10, 1, N'YES', N'YES', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (16, 5, 0, 0, N'NO', N'NO', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (17, 5, 0, 0, N'NO', N'NO', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (18, 5, 0, 0, N'NO', N'NO', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (19, 5, 0, 0, N'NO', N'NO', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (20, 5, 10, 1, N'NO', N'NO', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (21, 5, 10, 1, N'NO', N'YES', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (22, 5, 10, 1, N'NO', N'YES', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (23, 5, 0, 0, N'NO', N'NO', N'NO')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (24, 5, 10, 1, N'NO', N'NO', N'YES')
;
INSERT [dbo].[Test] ([Id], [Value], [StandardDeviation], [小於標準差], [連續8次], [連續2次], [五筆內有四筆以上]) VALUES (25, 5, 10, 1, N'NO', N'YES', N'YES')
;
SET IDENTITY_INSERT [dbo].[Test] OFF
;
SELECT *,
SUM(CASE WHEN [小於標準差] = 0 THEN 1 ELSE 0 END)
OVER (ORDER BY ID ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) ST_X_0,
CASE WHEN SUM(CASE WHEN [小於標準差] = 0 THEN 1 ELSE 0 END)
OVER (ORDER BY ID ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) >=8 THEN N'0連續8次'
ELSE N'0沒有8次' END ST_X_0_EX,
SUM(CASE WHEN [小於標準差] > 0 THEN 1 ELSE 0 END)
OVER (ORDER BY ID ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) ST_X_1,
CASE WHEN SUM(CASE WHEN [小於標準差] > 0 THEN 1 ELSE 0 END)
OVER (ORDER BY ID ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) >=8 THEN N'1連續8次'
ELSE N'1沒有8次' END ST_X_1_EX,
SUM(CASE WHEN [小於標準差] > 0 THEN 1 ELSE 0 END)
OVER (ORDER BY ID ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) ST_Y,
CASE WHEN SUM(CASE WHEN [小於標準差] > 0 THEN 1 ELSE 0 END)
OVER (ORDER BY ID ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) >=2 THEN N'1連續2次'
ELSE N'1沒有2次' END ST_Y_EX,
SUM(CASE WHEN [小於標準差] > 0 THEN 1 ELSE 0 END)
OVER (ORDER BY ID ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) ST_Z,
CASE WHEN SUM(CASE WHEN [小於標準差] > 0 THEN 1 ELSE 0 END)
OVER (ORDER BY ID ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) >=4 THEN N'1四筆以上'
ELSE N'1沒有四筆' END ST_Z_EX
FROM TEST