我知道简单查询的查询执行顺序。
但是,我对理解此查询中的确切执行顺序感到困惑:
select
M.DateKey As DateKey ,
PersonnelCode As PersonnelCode,
Isnull((select top 1 BranchCode
from [Financial].[viwPersonnelLocation]
where PersonnelCode = p.PersonnelCode and DateKey <= M.DateKey
order by DateKey desc)
,p.BranchCode) As BranchCode,
Isnull((select top 1 CertficateCode
from [Financial].[viwPersonnelEducation]
where PersonnelCode = p.PersonnelCode and DateKey <= M.DateKey
order by DateKey desc)
,p.Educationcode) As Educationcode
from (select DateKey,MonthOfYearKey,EDATE
from [Common].[DimTime]
where LastDayOfMonthKey = 1) M
Inner Join
[Financial].[viwPersonnelInfo] As P
on m.DateKey >= p.DateOfEmployeement
where (m.DateKey <= p.DateOfLeave) or (p.DateOfLeave='' or p.DateOfLeave is …Run Code Online (Sandbox Code Playgroud) 我从 Excel 粘贴了一个公式并粘贴到 SQL Server Management Studio。
一旦我执行它,我得到一个意想不到的结果:
SELECT (((10320238-2092189)/2092189)*100.0)/4.0 --returns 75.000000
Run Code Online (Sandbox Code Playgroud)
但是在对查询中的每个值添加精度后,它返回正确的结果:
SELECT (((10320238.0-2092189.0)/2092189.0)*100.0)/4.0 --returns 98.31866289250000
Run Code Online (Sandbox Code Playgroud)
为什么第一个查询不会带来 98% 的结果?的内部数据类型是10320238什么?是integer吗?
发动机是
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64)
Oct 20 2015 15:36:27
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
Run Code Online (Sandbox Code Playgroud) 试图按父项对没有共同组的每 X 行求和
declare @temp table(Row_ID int, amt DECIMAL(18,2))
insert into @temp values(1, 20)
insert into @temp values(2, 24)
insert into @temp values(3, 20)
insert into @temp values(4, 15)
insert into @temp values(5, 15)
Run Code Online (Sandbox Code Playgroud)
如果 X 行是 2,那么所需的结果是对 2 行求和并将总数放在行旁边。所以前 2 行总计为 44 ,接下来的 2 行为 35 ,剩下的 1 行总计为 15
Row_ID amt tot
1 20.00 44.00
2 24.00 44.00
3 20.00 35.00
4 15.00 35.00
5 15.00 15.00
Run Code Online (Sandbox Code Playgroud)
如果 X 行是 3,那么所需的结果
Row_ID amt tot
1 20.00 64.00
2 …Run Code Online (Sandbox Code Playgroud) 我需要一些帮助来弄清楚如何将表连接到我的查询中。表名每天都在更改,因为表名中使用了日期,而旧表因不再需要而被删除。
我的查询查找在数据库中有数据并且正在处理的“扫描”(因为缺少更好的词)。
我目前的查询是:
USE RetinaCSDatabase
SELECT S.ScanID [Scan ID], S.PolicyName [Scan], DATEADD(hh, +2, S.StartTime) [Scan Start], A.AssetName [Scanner], COUNT(AIPS.AssetIPID) [Hosts], S.TransactionGroup [Transaction Group ID]
FROM Scan S (NOLOCK)
LEFT JOIN Scanner SC (NOLOCK) ON S.ScannerID = SC.ScannerID
LEFT JOIN Asset A (NOLOCK) ON SC.AssetID = A.AssetID
LEFT JOIN Asset_IP_Scan AIPS (NOLOCK) ON S.ScanID = AIPS.ScanID
WHERE S.ProcessStatus < 2
GROUP BY S.ScanID, S.PolicyName, S.StartTime, A.AssetName, S.TransactionGroup
ORDER BY S.StartTime ASC, S.PolicyName ASC, A.AssetName ASC
Run Code Online (Sandbox Code Playgroud)
我需要加入的是包含仍需要处理的数据的表。这些表以名称“evt_scan_”开头,然后是日期。因此,例如,完整的表名将是“evt_scan_20171222”。2017 年 12 月 22 日执行的扫描数据将在表“evt_scan_20171222”中包含数据,并且可能在接下来的几天表“evt_scan_20171223”中包含数据。所以,我首先需要我的查询来检查表是否存在,然后加入它进行计数并检查接下来的天表是否存在,加入它进行另一个计数并将 …
我有一个包含以下数据的表格。
columnA columnB
ONE value 1
ONE value 2
ONE value 3
TWO value 1
TWO value 2
THREE value 1
Run Code Online (Sandbox Code Playgroud)
需要帮助创建下面给出的查询
COLUMN X COLUMN Y
ONE value 1, value 2, value 3
TWO value 1, value 2
THREE value 1
Run Code Online (Sandbox Code Playgroud) 我有一个 textBox 的值为 100,我想在 stock_out 列中增加该值,但只有直到 stock_out 列等于 stock_in 列,如果第一行值是 40 比第一行 stock_out 应该从 100 增加 10 比100(90) 的剩余值应在其下方的行中递增,然后在其下方的行中递增,直到需要为止(直到 100 为 0)。项目按 Item_Name 和 Bill No asc 排序。
Bill No Item_Name Stock_in Stock_out stock_in_hand
1 chicken 50 40 10
2 chicken 40 0 40
5 chicken 60 10 50
6 chicken 100 20 80
3 fish 100 30 70
4 fish 20 20 0
Run Code Online (Sandbox Code Playgroud)
要得到的结果。
Bill No Item_Name Stock_in Stock_out stock_in_hand
1 chicken 50 50 0
2 chicken 40 40 …Run Code Online (Sandbox Code Playgroud) 我创建了一个查询,我想将结果插入到另一个表中。它将每天作为作业运行,导入的数据仍将保留在结果集中。如果数据已存在于目标表中,我不希望导入数据。查询如下所示:
WITH cteUniquePages
(
CorrelationID,
Title,
URL,
HitDate,
TotalVisitsOnDate,
DontUseThisDate)
AS
(
SELECT DISTINCT
CorrelationID,
Title,
URL,
HitDate,
COUNT(HitDate) OVER (PARTITION BY URL, HitDate) 'TotalVisitsOnDate',
CAST(LogTime AS date) 'DontUseThisDate'
FROM
(SELECT
CorrelationId,
UserLogin,
LogTime,
Title,
CONCAT(
(CASE
WHEN WebUrl <> '' THEN CONCAT(ServerUrl,'/') ELSE ServerUrl END),
WebUrl,DocumentPath) 'URL',
CONCAT(
CASE
WHEN (LEN(DATEPART(day,LogTime)))=1 THEN CONCAT('0',DATEPART(day,LogTime)) END,
CASE
WHEN (LEN(DATEPART(day,LogTime)))=2 THEN (DATEPART(day,LogTime)) END,'-',
CASE
WHEN (LEN(DATEPART(month,LogTime)))=1 THEN CONCAT('0',DATEPART(month,LogTime)) END,
CASE
WHEN (LEN(DATEPART(month,LogTime)))=2 THEN (DATEPART(month,LogTime)) END,
'-', DATEPART(year,LogTime)) 'HitDate'
FROM WSS_Logging.dbo.RequestUsage
WHERE UserLogin …Run Code Online (Sandbox Code Playgroud) 正如标题所述,我有一个递归 CTE,当我更改 WHERE 子句中的运算符时,即使只有两行数据,它也会爆炸。
CREATE TABLE #Recursion
(Parent varchar(10), Child varchar(10), TopDate datetime)
INSERT INTO #Recursion (Parent, Child, TopDate)
VALUES
('00003137', '00003137', '2018-08-31'),
('04536347', '00003137', '2017-02-28'),
('05458040', '05458040', '9999-12-31'),
('00269705',' 05458040',' 9999-12-31')
;WITH
Parent AS
( SELECT parent
, child
, 1 as sort
, TopDate
FROM #Recursion
WHERE parent = child
UNION ALL
SELECT s.parent
, d.child
, d.sort + 1
, s.TopDate
FROM Parent as d
JOIN #Recursion s
ON s.child= d.parent
WHERE s.TopDate < d.TopDate
)
SELECT …Run Code Online (Sandbox Code Playgroud) 我有一列包含数字:
Value
-----
123
452
021
111
...
Run Code Online (Sandbox Code Playgroud)
我想得到每个值的数字之和。
答案应该看起来像
Value SumValue
----- --------
123 6
452 11
021 3
111 3
... ...
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我试过这个:
select value
, case
when len(value) = 2 then convert(int, left(value, 1))
+ convert(int, right(value, 1))
when len(value) = 3 then convert(int, substring(convert(varchar(1), value), 1,1))
+ convert(int, substring(convert(varchar(1), value), 2,1))
+ convert(int, substring(convert(varchar(1), value), 3,1))
else value
end as SumNum
from get_number (000, 999);
Run Code Online (Sandbox Code Playgroud)
当我达到三位数时,它无法正确计算,在我看来必须有更好的解决方案。
我不明白为什么 dbo 是 SQL Server 中唯一的授予者?还是我错了?
我的意思如下:无论我当前以哪个用户登录 SQL Server Management Studio,当我转到 Securables 下的数据库属性并授予用户一些权限并保存它并返回到 Securables 时:dbo 是显示为这些权限的授予者,这些权限是我之前授予的,而不是当前登录的用户。
为什么会这样?
在哪种情况下,我可以将 dbo 以外的其他用户视为授权人?
谢谢