划分两个 select 查询的结果

Divide the results of two select queries

我有两个 SQL 计数查询,它们自己工作正常,它们是:

SELECT count(*) AS TOTAL_PROGRESS_BY_LINE_
FROM dbo.PID_Components_PROCESS_LINES
WHERE ISOGEN_LINE_PROGRESS_ = 'C'

RESULT: TOTAL_PROGRESS_BY_LINE_ = 26

SELECT count(*) AS TOTAL_LINES_BY_PROJECT_
FROM dbo.PID_Components_PROCESS_LINES
WHERE PROJECT_NUMBER_ = 'PJ001234'

RESULT: TOTAL_LINES_BY_PROJECT_ = 130

现在如何添加到查询中以获得 26/130 的百分比??

我有一个关于如何获取百分比的新查询。

这里是:

SELECT ISOGEN_LINE_PROGRESS_, PROJECT_NUMBER_,
CASE
    WHEN ISOGEN_LINE_PROGRESS_ = 'A' THEN 'NOT IN MODEL'
    WHEN ISOGEN_LINE_PROGRESS_ = 'B' THEN 'ROUGHED IN'
    WHEN ISOGEN_LINE_PROGRESS_ = 'C' THEN 'PARTIAL CHECK'
    WHEN ISOGEN_LINE_PROGRESS_ = 'D' THEN 'READY FOR FINAL CHECK'
    WHEN ISOGEN_LINE_PROGRESS_ = 'E' THEN '100% COMPLETE'
    WHEN ISOGEN_LINE_PROGRESS_ = '0' THEN 'ISSUE FOR CONSTRUCTION'
END AS PROGRESS_PER_LINE_
FROM PID_Components_PROCESS_LINES
WHERE PROJECT_NUMBER_ = 'PJ001234'
ORDER BY ISOGEN_LINE_PROGRESS_

返回结果如下:

ISOGEN_LINE_PROGRESS_   PROJECT_NUMBER_ PROGRESS_PER_LINE_
A                       PJ001234        NOT IN MODEL
B                       PJ001234        ROUGHED IN
C                       PJ001234        PARTIAL CHECK
D                       PJ001234        READY FOR FINAL CHECK

如果我从查询中删除 Distinct,显然每个进度级别都有多行。我如何添加到上面的不同查询以在末尾有一列,其中每个级别的进度与总行数相比的比率或百分比?

Select 它们作为子查询。

默认情况下,结果将是一个整数,因为 count(*) returns 和 int。对于 decimal 结果转换为 decimal.

SELECT (
    SELECT CONVERT(decimal(9,2),COUNT(*)) AS TOTAL_PROGRESS_BY_LINE_
    FROM dbo.PID_Components_PROCESS_LINES
    WHERE ISOGEN_LINE_PROGRESS_ = 'C'
) / (
    SELECT CONVERT(decimal(9,2),COUNT(*)) AS TOTAL_LINES_BY_PROJECT_
    FROM dbo.PID_Components_PROCESS_LINES
    WHERE PROJECT_NUMBER_ = 'PJ001234'
)
DECLARE @firstone INT;
DECLARE @secondone INT;
SELECT @firstone = count(*)
FROM dbo.PID_Components_PROCESS_LINES
WHERE ISOGEN_LINE_PROGRESS_ = 'C';

SELECT @secondone = count(*)
FROM dbo.PID_Components_PROCESS_LINES
WHERE PROJECT_NUMBER_ = 'PJ001234';

SELECT @firstone / @secondone AS resultthing

SELECT @firstone /CAST(@secondone AS DECIMAL (9,2))

您可以在一个查询中使用条件聚合和简单划分:

select
  100.0 *
  count(
    case when ISOGEN_LINE_PROGRESS_ = 'C'
    then 1
    end
  )
  /
  nullif(count(
    case when PROJECT_NUMBER_ = 'PJ001234'
    then 1
    end
  ), 0) as rate_
FROM dbo.PID_Components_PROCESS_LINES
WHERE ISOGEN_LINE_PROGRESS_ = 'C'
  or PROJECT_NUMBER_ = 'PJ001234'

您可以使用常见的 table 表达式来获取计数,然后 select 一次 swell foop:

得到所需的结果
with Counts as (
  select
    ( select Count(*) from Sys.Tables ) as NumberOfTables,
    ( select Count(*) from Sys.Columns ) as NumberOfColumns
  )
  select NumberOfTables, NumberOfColumns,
    NumberOfColumns / NumberOfTables as ColumnsPerTable,
    ( 100 * NumberOfColumns ) / NumberOfTables as IntegerPercentColumnsPerTable,
    ( 100.0 * NumberOfColumns ) / NumberOfTables as NumericPercentColumnsPerTable
    from Counts;

我使用了现有的 table,因为您选择不提供 DDL 和示例数据。就这样吧。