作为MS SQL中的Concat字符串的一部分返回COUNT行

时间:2019-02-21 08:31:33

标签: sql sql-server

我有以下查询:

SELECT CONCAT(transactionID, '|', startStatus, '|', endStatus, '|', transactionType, '|', date) FROM db_transactions 
WHERE orgId = 2
ORDER BY date DESC
OFFSET 0 ROWS
FETCH NEXT 13 ROWS ONLY

我不能检索多于1列,因此我正在使用CONCAT在一个结果中获得多列。 但是我还需要获取项目总数。

所以基本上我想返回COUNT(transactionID)作为CONCAT字符串的一部分,我尝试添加:

SELECT CONCAT(transactionID, '|', startStatus, '|', endStatus, '|', transactionType, '|', date, '|', COUNT(transactionID))

但这没用。

这有可能吗?

2 个答案:

答案 0 :(得分:0)

您可以添加转换为COUNT()的窗口VARCHAR

SELECT 
    CONCAT(
        transactionID, 
        '|', 
        startStatus, 
        '|', 
        endStatus, 
        '|', 
        transactionType, 
        '|', 
        date,
        '|',
        CONVERT(VARCHAR(10), COUNT(1) OVER(PARTITION BY transactionID)))
FROM 
    db_transactions 
WHERE 
    orgId = 2
ORDER BY 
    date DESC
OFFSET 
    0 ROWS
FETCH NEXT 
    13 ROWS ONLY

答案 1 :(得分:0)

如果您想为每个TransactionID加上这些ID的总数,则可以尝试分析函数 COUNT() OVER (PARTITION BY)

  SELECT CONCAT(transactionID, '|', 
                  startStatus, '|', 
                    endStatus, '|', 
              transactionType, '|', 
                         date, '|', 
             COUNT(1) OVER (PARTITION BY transactionID))
     ...