Sql t1.voided='1'然后0 ELSE t1.amount END)作为netSales ,总和(作废时的大小写='1'然后是1结束)作为作废 ,Sum(Isnull(te.Commission,t1.voided时的情况='1'然后0其他t1.amo

Sql t1.voided='1'然后0 ELSE t1.amount END)作为netSales ,总和(作废时的大小写='1'然后是1结束)作为作废 ,Sum(Isnull(te.Commission,t1.voided时的情况='1'然后0其他t1.amo,sql,sql-server,math,varchar,Sql,Sql Server,Math,Varchar,t1.voided='1'然后0 ELSE t1.amount END)作为netSales ,总和(作废时的大小写='1'然后是1结束)作为作废 ,Sum(Isnull(te.Commission,t1.voided时的情况='1'然后0其他t1.amount\u Commission END))作为总佣金 ,Sum(t1.voided='1'然后0 ELSE t1.amount\u sas END时的情况)作为totalShareASale ,SUM(当交易输入('Sale','Manual

t1.voided='1'然后0 ELSE t1.amount END)作为netSales ,总和(作废时的大小写='1'然后是1结束)作为作废 ,Sum(Isnull(te.Commission,t1.voided时的情况='1'然后0其他t1.amount\u Commission END))作为总佣金 ,Sum(t1.voided='1'然后0 ELSE t1.amount\u sas END时的情况)作为totalShareASale ,SUM(当交易输入('Sale','Manual Sale')并将'1'作废,然后将'1'结束时的情况)作为numOrders ,sum(当交易类型为'Lead'然后为1 end时的情况)作为numLeads ,计数(当交易\输入('Sale','Manual Sale')并作废'1',然后1结束时的情况)为numAffiliates 从dbo.sas_事务作为t1 左外部联接dbo.sas_transaction_编辑为t1.transaction_id=te.TransID上的te 其中t1.transaction\u类型不在('手动存款'、'自动存款') 和t1.user_id 144212 按转换分组(VARCHAR(10),t1.date\u事务,10) ,t1.qb_商户id ,t1.store_id
为什么不从剥离所有结果开始,并将其作为
select*
语句。如果这样做有效,将每个计算结果以1乘以1的方式相加,直到出现错误…它表示将数值转换为数据类型数值,因此我不会假设它是字符转换如果
date\u transaction*
是一个日期时间,则您不能执行所有这些varchar转换来比较日期部分;我猜这是一个空日期,但我认为OP应该分离出查询的确切部分,即barfing。使用带有case表达式的sum将大大有助于此查询。没有必要在所有这些子查询中反复地点击同一个基表。随着更改的进行,我仍然会得到相同的算术错误。对……正如我所说,这只是简化了查询。几乎可以肯定,这是你的一个总和。我猜在某个地方有一列不是数字数据类型,而该列中有一个值不是数字。我们不知道你们的桌子到底是什么样子。这里纯粹是猜测,但至少有一列是varchar吗?(t1.amount,te.TransAmount,te.OriginalTransAmount,t1.amount\u commission,t1.amount\u sas)老实说,我最初并没有构建这个,但查看表中的值:作废、交易类型和支付货币是varchar。其他所有内容都是decimal、int、datetime或text。如果可能的话,我建议将text数据类型更改为varchar(max)。文本数据类型已经被弃用了,坦率地说,这是一个真正的麻烦。查看值是不相关的,列的数据类型才是重要的。您遇到的问题几乎肯定是因为其中一列不是数字数据类型。如果没有更多细节,我们所能做的就是帮助您隔离问题。
SELECT        
   CONVERT(VARCHAR(10), t1.date_transaction, 10) AS summaryDate,      
   t1.qb_merchant_id, t1.store_id, 
   SUM(t1.amount) - ISNULL(SUM(te.TransAmount), 0) + 
       ISNULL(SUM(te.OriginalTransAmount), 0) AS grossSales, 
   SUM(CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount END) AS netSales,
   (SELECT COUNT(*) AS Expr1
    FROM dbo.sas_transactions AS t3
    WHERE (voided = '1') AND (qb_merchant_id = t1.qb_merchant_id) AND (store_id = t1.store_id) AND (CONVERT(VARCHAR(10), date_transaction, 10) = CONVERT(VARCHAR(10), t1.date_transaction, 10))) AS voids, 
   SUM(ISNULL(te.Commission, CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount_commission END)) AS totalCommissions, 
   SUM(CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount_sas END) AS totalShareASale,
   (SELECT COUNT(*) AS Expr1
    FROM dbo.sas_transactions AS t2
    WHERE (transaction_type = 'Sale' OR transaction_type = 'Manual Sale') AND (qb_merchant_id = t1.qb_merchant_id) AND (store_id = t1.store_id) AND (voided <> '1') AND (CONVERT(VARCHAR(10), date_transaction, 10) = CONVERT(VARCHAR(10), t1.date_transaction, 10))) AS numOrders,
   (SELECT COUNT(*) AS Expr1
    FROM dbo.sas_transactions AS t4
    WHERE (transaction_type = 'Lead') AND (qb_merchant_id = t1.qb_merchant_id) AND (store_id = t1.store_id) AND (voided <> '1') AND (CONVERT(VARCHAR(10), date_transaction, 10) = CONVERT(VARCHAR(10), t1.date_transaction, 10))) AS numLeads,
   (SELECT COUNT(DISTINCT user_id) AS Expr1
    FROM dbo.sas_transactions AS t2
    WHERE (transaction_type = 'Sale' OR transaction_type = 'Manual Sale') AND (qb_merchant_id = t1.qb_merchant_id) AND (store_id = t1.store_id) AND (voided <> '1') AND (CONVERT(VARCHAR(10), date_transaction, 10) = CONVERT(VARCHAR(10), t1.date_transaction, 10))) AS numAffiliates
FROM            
    dbo.sas_transactions AS t1 
LEFT OUTER JOIN
    dbo.sas_transaction_edits AS te ON t1.transaction_id =  te.TransID
WHERE        
    (t1.transaction_type <> 'Manual Deposit') 
    AND (t1.transaction_type <> 'Autodeposit')
GROUP BY 
    CONVERT(VARCHAR(10), t1.date_transaction, 10), t1.qb_merchant_id, t1.store_id
    SELECT        CONVERT(VARCHAR(10), t1.date_transaction, 10) AS summaryDate, t1.qb_merchant_id, t1.store_id, SUM(t1.amount) - ISNULL(SUM(te.TransAmount), 0) + ISNULL(SUM(te.OriginalTransAmount), 0) AS grossSales, 
                     SUM(CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount END) AS netSales,
                         (SELECT        COUNT(*) AS Expr1
                           FROM            dbo.sas_transactions AS t3
                           WHERE        (voided = '1') AND (qb_merchant_id = t1.qb_merchant_id) AND (store_id = t1.store_id) AND (CONVERT(VARCHAR(10), date_transaction, 10) = CONVERT(VARCHAR(10), t1.date_transaction, 10))) 
                     AS voids, SUM(ISNULL(te.Commission, CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount_commission END)) AS totalCommissions, SUM(CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount_sas END) 
                     AS totalShareASale,
                         (SELECT        COUNT(*) AS Expr1
                           FROM            dbo.sas_transactions AS t2
                           WHERE        (transaction_type = 'Sale' OR
                                                     transaction_type = 'Manual Sale') AND (qb_merchant_id = t1.qb_merchant_id) AND (store_id = t1.store_id) AND (voided <> '1') AND (CONVERT(VARCHAR(10), date_transaction, 10) 
                                                     = CONVERT(VARCHAR(10), t1.date_transaction, 10))) AS numOrders,
                         (SELECT        COUNT(*) AS Expr1
                           FROM            dbo.sas_transactions AS t4
                           WHERE        (transaction_type = 'Lead') AND (qb_merchant_id = t1.qb_merchant_id) AND (store_id = t1.store_id) AND (voided <> '1') AND (CONVERT(VARCHAR(10), date_transaction, 10) 
                                                     = CONVERT(VARCHAR(10), t1.date_transaction, 10))) AS numLeads,
                         (SELECT        COUNT(DISTINCT user_id) AS Expr1
                           FROM            dbo.sas_transactions AS t2
                           WHERE        (transaction_type = 'Sale' OR
                                                     transaction_type = 'Manual Sale') AND (qb_merchant_id = t1.qb_merchant_id) AND (store_id = t1.store_id) AND (voided <> '1') AND (CONVERT(VARCHAR(10), date_transaction, 10) 
                                                     = CONVERT(VARCHAR(10), t1.date_transaction, 10))) AS numAffiliates
    FROM            dbo.sas_transactions AS t1 LEFT OUTER JOIN
                     dbo.sas_transaction_edits AS te ON t1.transaction_id = te.TransID
    WHERE        (t1.transaction_type <> 'Manual Deposit') AND (t1.transaction_type <> 'Autodeposit') AND (t1.user_id <> 144212)
    GROUP BY CONVERT(VARCHAR(10), t1.date_transaction, 10), t1.qb_merchant_id, t1.store_id
SELECT CONVERT(VARCHAR(10), t1.date_transaction, 10) AS summaryDate
    , t1.qb_merchant_id
    , t1.store_id 
    , Sum(t1.amount) - Isnull(Sum(te.TransAmount), 0) + Isnull(Sum(te.OriginalTransAmount), 0) AS grossSales
    , Sum(CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount END) AS netSales
    , SUM(case when voided = '1' then 1 end) as voids
    , Sum(Isnull(te.Commission, CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount_commission END)) AS totalCommissions
    , Sum(CASE WHEN t1.voided = '1' THEN 0 ELSE t1.amount_sas END) AS totalShareASale
    , SUM(case when transaction_type IN ('Sale', 'Manual Sale') and voided <> '1' then 1 end) as numOrders
    , sum(case when transaction_type = 'Lead' then 1 end) as numLeads
    , count(case when transaction_type IN ('Sale', 'Manual Sale') and voided <> '1' then 1 end) as numAffiliates
FROM   dbo.sas_transactions AS t1
LEFT OUTER JOIN dbo.sas_transaction_edits AS te ON t1.transaction_id = te.TransID
WHERE  t1.transaction_type not in ('Manual Deposit', 'Autodeposit')
    AND t1.user_id <> 144212
GROUP BY CONVERT(VARCHAR(10), t1.date_transaction, 10)
    , t1.qb_merchant_id
    , t1.store_id