【问题标题】:How to select with a variable in SQL Server?如何在 SQL Server 中使用变量进行选择?
【发布时间】:2022-01-12 19:11:03
【问题描述】:

我的选择需要一些帮助。

SELECT
    bpasession.sessionnumber, 
    bpasession.sessionid, 
    bparesource.name, 
    bpaprocess.name, 
    bpastatus.description, 
    bpasession.startdatetime, 
    bpasession.enddatetime, 
    REPLACE(CONVERT(varchar(5), 
                    DATEDIFF(ss, bpasession.startdatetime, bpasession.enddatetime)/ 3600) + ':' + 
                    STR(CONVERT(varchar(5), DATEDIFF(ss, bpasession.startdatetime, bpasession.enddatetime) % 3600 / 60), 2) + ':' + 
                    STR(CONVERT(varchar(5), DATEDIFF(ss, bpasession.startdatetime, bpasession.enddatetime) % 60), 2), ' ', '0'),
    (SELECT COUNT(BPAWorkQueueItem.id) 
     FROM BPAWorkQueueItem 
     WHERE BPAWorkQueueItem.sessionid = '(bpasession.sessionid line variable) ex. D7917C6F-E9D4-48E4-B7AE-53EEE6D18616') AS x
FROM
    BPAProcess, 
    BPAStatus, 
    BPASession, 
    BPAResource
WHERE
    bpastatus.statusid = bpasession.statusid 
    AND bpasession.processid = bpaprocess.processid
    AND bpasession.runningresourceid = BPAResource.resourceid   
    AND startdatetime >= '2021-12-01' 
ORDER BY
    bpasession.sessionnumber DESC

OUTPUT

我想将一个动态变量添加到选择计数器中。我的查询的每一行都有一个不同的 sessionid,它将被添加到查询中以计算它在具有相同 sessionid 的工作队列项中的元素。

我该怎么做?

【问题讨论】:

  • MySQL 和 SQL Server 是完全不同的产品;您真正使用的是哪一个?也是 2021,ANSI-92 显式 JOIN 语法已经存在了 29 年,您采用它已经 很长时间了。 Bad Habits to Kick : Using old-style JOINs
  • 开始正确描述您的问题 - 我阅读了最后一部分,我真的无法理解您要做什么。无需变量即可在附加列中获得硬编码输出。
  • 样本数据和预期输出将大有帮助。旁白:复杂的日期计算看起来应该只是CAST(... AS time)

标签: sql sql-server tsql select count


【解决方案1】:
SELECT
    bpasession.sessionnumber, 
    bpasession.sessionid, 
    bparesource.name, 
    bpaprocess.name, 
    bpastatus.description, 
    bpasession.startdatetime, 
    bpasession.enddatetime, 
    REPLACE(CONVERT(varchar(5), 
                    DATEDIFF(ss, bpasession.startdatetime, bpasession.enddatetime)/ 3600) + ':' + 
                    STR(CONVERT(varchar(5), DATEDIFF(ss, bpasession.startdatetime, bpasession.enddatetime) % 3600 / 60), 2) + ':' + 
                    STR(CONVERT(varchar(5), DATEDIFF(ss, bpasession.startdatetime, bpasession.enddatetime) % 60), 2), ' ', '0'),
    (SELECT COUNT(BPAWorkQueueItem.id) 
     FROM BPAWorkQueueItem 
     WHERE BPAWorkQueueItem.sessionid = bpasession.sessionid) AS x
FROM
    BPAProcess, 
    BPAStatus, 
    BPASession, 
    BPAResource
WHERE
    bpastatus.statusid = bpasession.statusid 
    AND bpasession.processid = bpaprocess.processid
    AND bpasession.runningresourceid = BPAResource.resourceid   
    AND startdatetime >= '2021-12-01' 
ORDER BY
    bpasession.sessionnumber DESC

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 2014-07-29
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2014-05-22
相关资源
最近更新 更多