【问题标题】:SQL - Combine another SELECT query with a JOINSQL - 将另一个 SELECT 查询与 JOIN 组合
【发布时间】:2015-12-28 21:24:23
【问题描述】:

我在 stackoverflow 上找到了这篇文章,Add a summary row with totals

我想要完成的只是这个,但是我在下面的 WITH 语句中列出了转换后的 DURATION 字段。我正在尝试将那一天(24 小时期间)的“持续时间”列加起来。我不知道这是否可能。让我知道。谢谢!

;WITH dupes AS
(
    SELECT 
        CALLER_PHONE, DIALED_PHONE
    FROM 
        dbo.PBXDATA
    GROUP BY 
        CALLER_PHONE, DIALED_PHONE
)
SELECT 
    c.CALL_TIME, c.SALES_REP, c.CALL_TYPE, c.FLAG1, 
    COALESCE(NULLIF(c.FLAG3, 'NULL'),'') AS FLAG3, 
    ISNULL(dupes.CALLER_PHONE, '') + ISNULL(dupes.DIALED_PHONE,'') AS PHONE, 
    CONVERT(VARCHAR(8), c.DURATION, 108) AS DURATION
FROM 
    dupes
JOIN 
    dbo.PBXDATA c ON dupes.CALLER_PHONE = c.CALLER_PHONE 
                  OR dupes.DIALED_PHONE = c.DIALED_PHONE
WHERE 
    (c.SALES_REP LIKE 'Doug%' OR 
     c.SALES_REP LIKE 'Nick%' OR 
     c.SALES_REP LIKE 'Bob%' OR 
     c.SALES_REP LIKE 'Joe%' OR 
     c.SALES_REP LIKE 'John%')
    AND (c.CALL_TIME >= DATEADD(DAY, 0, DATEDIFF(DAY, 0,   CURRENT_TIMESTAMP)))
    AND (c.CALL_TIME <  DATEADD(DAY, 1, DATEDIFF(DAY, 0,  CURRENT_TIMESTAMP)))
    AND DURATION = (SELECT CAST(DATEADD(S, SUM(DATEDIFF(S, '00:00:00', DURATION)), '00:00:00') AS TIME) 
                    FROM dbo.PBXDATA) 
ORDER BY 
    c.CALL_TIME;

【问题讨论】:

  • 你能给我们表格结构、输入和期望的输出吗?很难理解你想要什么。
  • 对此我深表歉意。谢谢你提醒我。下面是链接。 tvlift.com/beta-test/table.png

标签: sql-server tsql join where-clause with-statement


【解决方案1】:

如果您只想要 dupes 表中 Duration 的总和,您可以在此处汇总您的 Duration。

;WITH dupes AS
(
SELECT CALLER_PHONE, DIALED_PHONE, convert(varchar(8), SUM(c.DURATION), 108) AS Total_Time 
FROM dbo.PBXDATA
GROUP BY CALLER_PHONE, DIALED_PHONE
)

并将 , Total_Time 添加到您的 SELECT 语句中。

如果您的查询中有多天,则需要在 dupes 中添加日期字段,并将其添加为 JOIN 的 ON 子句的一部分。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2018-03-29
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多