首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自链接服务器的交叉连接与左连接查询

来自链接服务器的交叉连接与左连接查询
EN

Stack Overflow用户
提问于 2017-08-24 15:47:20
回答 1查看 30关注 0票数 0

使用一些CROSS JOIN和一个UNION ALL,并希望从其中的两个列中获得一个百分比。下面你会看到我的剧本。找人帮忙。

代码语言:javascript
复制
DECLARE @Now DATETIME,
@Monday DATETIME,
@Friday DATETIME,
@StartTime VARCHAR(16) ,
@EndTime VARCHAR(16)
SET @StartTime = '00:01:00AM'
SET @EndTime = '11:59:59PM'
SET @Now = GETDATE()
SET @Monday = DATEADD(dd, DATEDIFF(dd, 0, @Now), -1)
SET @Friday = DATEADD(dd, DATEDIFF(dd, 0, @Now), -1)

SELECT t1.EventDate,t1.Sorter, t1.Items,t2.Misfire,t3.DisabledTrays
FROM
(
SELECT EventDate = CONVERT(CHAR(15), CURRENT_TIMESTAMP -1, 106)
   , Items = COUNT(SortID) 
   , Sorter = 'TILT_1' 
FROM  [111.11.1.111].[AAA].[dbo].[SortList]
WHERE CreationTime BETWEEN @Monday + ' ' + @StartTime
                  AND @Friday + ' ' + @EndTime 
                    AND WorkstationID = 'T01'
)t1
CROSS JOIN
(
SELECT EventDate = CONVERT(CHAR(15), CURRENT_TIMESTAMP -1, 106) 
   , Misfire = COUNT(StatsUpd) 
   , 'TILT_1' AS Sorter
FROM  [111.11.1.111].[AAA].[dbo].[MisfireLog]
WHERE RecordedPeriod BETWEEN @Monday + ' ' + @StartTime
                    AND @Friday + ' ' + @EndTime
                        AND WorkstationID = 'T01'
)t2
CROSS JOIN
(
SELECT EventDate = CONVERT(CHAR(15), CURRENT_TIMESTAMP -1, 106)
   , DisabledTrays = COUNT(SorterID)
   , 'TILT_1' AS Sorter
FROM [111.11.1.111].[AAA].[dbo].[DisabledCarriers]
WHERE SorterID  = 'TILT_1'
)t3

UNION ALL

SELECT t1.EventDate,t1.Sorter, t1.Items,t2.Misfire,t3.DisabledTrays
FROM
(
SELECT EventDate = CONVERT(CHAR(15), CURRENT_TIMESTAMP -1, 106)
   , Items = COUNT(SortID) 
   , 'TILT_2' AS Sorter
FROM  [111.11.1.111].[AAA].[dbo].[SortList]
WHERE CreationTime BETWEEN @Monday + ' ' + @StartTime
                AND @Friday + ' ' + @EndTime
                    AND WorkstationID = 'T02'
)t1
CROSS JOIN
(
SELECT EventDate = CONVERT(CHAR(15), CURRENT_TIMESTAMP -1, 106)
   , Misfire = COUNT(StatsUpd) 
   , 'TILT_2' AS Sorter
FROM  [111.11.1.111].[AAA].[dbo].[MisfireLog]
WHERE RecordedPeriod BETWEEN @Monday + ' ' + @StartTime
                    AND @Friday + ' ' + @EndTime
                        AND WorkstationID = 'T02'
)t2
CROSS JOIN
(
SELECT EventDate = CONVERT(CHAR(15),CURRENT_TIMESTAMP -1, 106)
   , DisabledTrays = COUNT(SorterID)
   , 'TILT_2' AS Sorter
FROM [111.11.1.111].[AAA].[dbo].[DisabledCarriers]
WHERE SorterID = 'TILT_2'
)t3;

SELECT 'TILT_1' AS Sorter
   , COUNT (StoreID) AS'NI_Misfires'
FROM [111.11.1.111].[AAA].[dbo].[MisfireLog]
WHERE StoreID = 'NI' AND RecordedPeriod BETWEEN @Monday + ' ' + @StartTime
                    AND @Friday + ' ' + @EndTime AND WorkstationID = 'T01' 

与您在上面看到的一样,这是我目前得到的结果集.

代码语言:javascript
复制
EventDate       Sorter Items       Misfire     DisabledTrays
--------------- ------ ----------- ----------- -------------
23 Aug 2017     TILT_1 4332        30          1
23 Aug 2017     TILT_2 4246        21          2

(2 row(s) affected)

Sorter NI_Misfires
------ -----------
TILT_1 5
TILT_2 5

(受影响的2行)

我想看到的是以下内容。显示Items**-** Misfire 然后除以 Items (as Misfire%**) )显示99.30%。我正努力实现这一目标。**

代码语言:javascript
复制
EventDate       Sorter Items       Misfire     Accuracy%    DisabledTrays
--------------- ------ ----------- ----------- ---------    -------------
23 Aug 2017     TILT_1 4332        30          99.30%       1
23 Aug 2017     TILT_2 4246        21          99.51%       2

(2 row(s) affected)

Sorter NI_Misfires
------ -----------
TILT_1 5
TILT_2 5

(2 row(s) affected)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-24 16:06:49

将选择行更改为:

代码语言:javascript
复制
SELECT
t1.EventDate,
t1.Sorter, 
t1.Items,
t2.Misfire,
CONVERT(VARCHAR, ROUND((CONVERT(FLOAT, t1.Items) - CONVERT(FLOAT, t2.Misfire))/CONVERT(FLOAT, t1.Items) * 100, 2)) + '%' AS [Accuracy%],
t3.DisabledTrays
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45865972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档