Sql 如果与另一列中的列和值匹配,则获取列和值

Sql 如果与另一列中的列和值匹配,则获取列和值,sql,subquery,Sql,Subquery,我有这样一个问题: ( SELECT DISTINCT UniqueBatchNumber AS UBN, count(ID) AS Count, SUM(amount) AS Total, InstrumentType AS IType FROM Transactions WHERE TransactionDate = '2012-10-01' GROUP BY UniqueBatchNumber, InstrumentType HAVING InstrumentTyp

我有这样一个问题:

(
SELECT DISTINCT UniqueBatchNumber AS UBN, 
  count(ID) AS Count, 
  SUM(amount) AS Total, 
  InstrumentType AS IType 
FROM Transactions 
WHERE TransactionDate = '2012-10-01' 
GROUP BY UniqueBatchNumber, InstrumentType HAVING InstrumentType = 'c'
) 
UNION ALL 
(
SELECT DISTINCT 
  UniqueBatchNumber AS UBN, 
  count(ID) AS Count, 
  SUM(amount) AS Total, 
  InstrumentType AS IType 
FROM Transactions 
WHERE TransactionDate = '2012-10-01' 
GROUP BY UniqueBatchNumber, InstrumentType HAVING InstrumentType = 'd'
)
它返回以下内容:

UBN | Count | Total | IType 8237 | 1 | 150689.43 | C 8238 | 26 | 42838.80 | C 8241 | 1 | 2410932.00 | C 8247 | 1 | 100.00 | C 8250 | 1 | 99297.05 | C 8256 | 1 | 1929.00 | C 8259 | 16 | 12623.86 | C 8269 | 1 | 7405022.45 | C 8238 | 1 | 346522.57 | D 8241 | 1 | 303.00 | D 8243 | 1 | 204066.05 | D 8246 | 1 | 100.00 | D 8247 | 1 | 99297.05 | D 8256 | 11 | 847.00 | D 8259 | 1 | 571888.90 | D 8279 | 5 | 3986.75 | D 但就是还不能解决这个问题,有什么想法吗


提前谢谢你。

沿着这些思路,你会接近你想要的东西吗

SELECT
    C.ubn AS ubn_C,
    D.ubn AS ubn_D,
    C.count AS Count_C,
    D.count AS Count_D,
    C.total AS MatchingTotal
FROM   
    (SELECT DISTINCT 
        uniquebatchnumber AS ubn,
        Count(id) AS count,
        Sum(amount) AS total,
        Instrumenttype AS itype
    FROM            
        transactions
    WHERE           
        transactiondate = '2012-10-01'
        AND instrumenttype = 'c'
    GROUP BY        
        uniquebatchnumber,
        instrumenttype) AS C
JOIN
    (SELECT DISTINCT 
        uniquebatchnumber AS ubn,
        Count(id) AS count,
        Sum(amount) AS total,
        Instrumenttype AS itype
    FROM            
        transactions
    WHERE           
        transactiondate = '2012-10-01'
        AND instrumenttype = 'd'
    GROUP BY        
        uniquebatchnumber,
        instrumenttype) AS D
ON C.Total = D.Total
请尝试此查询。 您已经完成了90%的工作,只需在查询中稍作更改

SELECT
    A.UBN,
    SUM(ISNULL(A.Total,0)) Total
FROM
(
    SELECT 
      DISTINCT 
      UniqueBatchNumber AS UBN, 
      count(ID) AS Count, 
      SUM(amount) AS Total, 
      InstrumentType AS IType 
    FROM 
        Transactions 
    WHERE 
        TransactionDate = '2012-10-01' 
    GROUP BY 
        UniqueBatchNumber, 
        InstrumentType 
    HAVING 
        InstrumentType = 'c'

UNION 

    SELECT 
      DISTINCT 
      UniqueBatchNumber AS UBN, 
      count(ID) AS Count, 
      SUM(amount) AS Total, 
      InstrumentType AS IType 
    FROM 
        Transactions 
    WHERE 
        TransactionDate = '2012-10-01' 
    GROUP BY 
        UniqueBatchNumber, 
        InstrumentType 
    HAVING InstrumentType = 'd'
)
AS A
GROUP BY
    A.UBN
我建议您使用UNION而不是UNION ALL Bcoz UNION在性能方面比UNION ALL快一点

此查询未经测试。
如果此查询出现任何错误,请回复。

因此,您只需要多个条目具有相同UBN但不同IType的条目?欢迎使用So!你能举一个预期产出的例子吗?从您的描述中,我不清楚。听起来您希望在
c
中设置一组UBN,在
d
中设置一组UBN的交集?您使用的是哪种DBMS?博士后?神谕(顺便说一句:在一个联合体中,围绕个人选择的括号是无用的)我正在使用SQL Server 2012。@如果此查询不适合您,请回答我非常感谢您的回答…测试了它,看起来与我想要的非常接近…是否可能也包含不匹配的项,或者我必须使用另一个查询。您想要哪些不匹配的项(特别是要添加的列)从这两列中…我将使用一个大数据集进行进一步测试。如果需要,我将提供反馈。谢谢。不,不需要为输出编写另一个查询。这取决于您想要什么类型的输出。1.您也想要计数的总和吗?2.假设总和=3,那么您想要具有相同输出的两行吗?请发布预期的输出你想要的。谢谢你,乔。这差不多了。如果我能做一些像…关于和(C.Total)=和(D.Total)。我怎么能得到不匹配的批号(UBN)。非常感谢。你好。我不知道你为什么要做关于和(C.Total)=和(D.Total)的事情。所写的查询已经与每个批号的金额总和相匹配(它们在派生表查询中求和)。或者我不理解您的要求吗?谢谢Joe…我意识到这是不可行的,甚至是不必要的,因为UBN部分不同。非常感谢您的回答。
SELECT
    A.UBN,
    SUM(ISNULL(A.Total,0)) Total
FROM
(
    SELECT 
      DISTINCT 
      UniqueBatchNumber AS UBN, 
      count(ID) AS Count, 
      SUM(amount) AS Total, 
      InstrumentType AS IType 
    FROM 
        Transactions 
    WHERE 
        TransactionDate = '2012-10-01' 
    GROUP BY 
        UniqueBatchNumber, 
        InstrumentType 
    HAVING 
        InstrumentType = 'c'

UNION 

    SELECT 
      DISTINCT 
      UniqueBatchNumber AS UBN, 
      count(ID) AS Count, 
      SUM(amount) AS Total, 
      InstrumentType AS IType 
    FROM 
        Transactions 
    WHERE 
        TransactionDate = '2012-10-01' 
    GROUP BY 
        UniqueBatchNumber, 
        InstrumentType 
    HAVING InstrumentType = 'd'
)
AS A
GROUP BY
    A.UBN