明细数据

--明细数据
SELECT AssetCard.cardid AS CardID
      ,AssetProp.Id AS idAssetProp
      ,AssetProp.Name AS AssetPropName
      ,AssetCard.origValue AS OrigValue
      ,AssetCard.totalDepr AS TotalDepr
      ,AssetCard.netamount AS NetAmount
      ,Asset.monthDeprAmount AS MonthDeprAmount
FROM AM_Asset AS AssetCard
    LEFT JOIN AA_AssetProp AS AssetProp ON AssetCard.idAssetProp = AssetProp.id
    INNER JOIN AM_Asset AS Asset ON Asset.cardid = AssetCard.cardid AND AssetCard.isActive = 1
WHERE 1 = 1 AND (Asset.srcvoucherdate >= '2012-05-01' AND Asset.srcvoucherdate < dateadd(DAY,1,'2012-06-30')) AND Asset.idprocesstype = 'AF3B75A8-CB29-43C6-B829-1F4A475347C5' 

上述查询的结果如下:

CardID idAssetProp AssetPropName OrigValue TotalDepr NetAmount MonthDeprAmount
C7B6879C-7F88-47F8-BD81-767D5557DC70 60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 3000 848.75 2151.25 121.25
C7B6879C-7F88-47F8-BD81-767D5557DC70 60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 3000 848.75 2151.25 121.25
8C6B1101-7665-439F-B7D0-4C55ADCD1A8A 60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 3000 24.26 2975.74 12.13
8C6B1101-7665-439F-B7D0-4C55ADCD1A8A 60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 3000 24.26 2975.74 12.13
612D3363-0FDE-4140-AF31-5C059D5978D0 60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 3000 24.26 2975.74 12.13
612D3363-0FDE-4140-AF31-5C059D5978D0 60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 3000 24.26 2975.74 12.13

如果按照idAssetProp、AssetPropName分组对查询结果进行统计,其中明细数据中的CardID,OrigValue、TotalDepr、NetAmount只能统计一遍,而相同分组的MonthDeprAmount直接求和。

初次处理结果

第一次查询的SQL如下:

SELECT AssetProp.Id AS idAssetProp
      ,AssetProp.Name AS AssetPropName
      ,sum(AssetCard.origValue) AS OrigValue
      ,sum(AssetCard.totalDepr) AS TotalDepr
      ,sum(AssetCard.netamount) AS NetAmount
      ,sum(Asset.monthDeprAmount) AS MonthDeprAmount
FROM AM_Asset AS AssetCard
    LEFT JOIN AA_AssetProp AS AssetProp ON AssetCard.idAssetProp = AssetProp.id
    INNER JOIN AM_Asset AS Asset ON Asset.cardid = AssetCard.cardid AND AssetCard.isActive = 1
WHERE 1 = 1 AND (Asset.srcvoucherdate >= '2012-05-01' AND Asset.srcvoucherdate < dateadd(DAY,1,'2012-06-30')) AND Asset.idprocesstype = 'AF3B75A8-CB29-43C6-B829-1F4A475347C5' AND (1 = 1) GROUP BY AssetProp.Id,AssetProp.Name

查询的结果如下,结果中的数据出错: 

idAssetProp AssetPropName OrigValue TotalDepr NetAmount MonthDeprAmount
60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 18000 1794.54 16205.46 291.02

使用Distinct关键字去重

 第二次查询的SQL如下:

SELECT AssetProp.Id AS idAssetProp
      ,AssetProp.Name AS AssetPropName
      ,sum(DISTINCT AssetCard.origValue) AS OrigValue
      ,sum(DISTINCT AssetCard.totalDepr) AS TotalDepr
      ,sum(DISTINCT AssetCard.netamount) AS NetAmount
      ,sum(Asset.monthDeprAmount) AS MonthDeprAmount
FROM AM_Asset AS AssetCard
    LEFT JOIN AA_AssetProp AS AssetProp ON AssetCard.idAssetProp = AssetProp.id
    INNER JOIN AM_Asset AS Asset ON Asset.cardid = AssetCard.cardid AND AssetCard.isActive = 1
WHERE 1 = 1 AND (Asset.srcvoucherdate >= '2012-05-01' AND Asset.srcvoucherdate < dateadd(DAY,1,'2012-06-30')) AND Asset.idprocesstype = 'AF3B75A8-CB29-43C6-B829-1F4A475347C5' AND (1 = 1) GROUP BY AssetProp.Id,AssetProp.Name

 第二次查询结果:

idAssetProp AssetPropName OrigValue TotalDepr NetAmount MonthDeprAmount
60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 3000 873.01 5126.99 291.02

使用UNION去重

第三次使用Union去重,SQL如下:

SELECT AssetProp.Id AS idAssetProp
      ,AssetProp.Name AS AssetPropName
      ,sum(0) AS OrigValue
      ,sum(0) AS TotalDepr
      ,sum(0) AS NetAmount
      ,sum(Asset.monthDeprAmount) AS MonthDeprAmount
FROM AM_Asset AS AssetCard
    LEFT JOIN AA_AssetProp AS AssetProp ON AssetCard.idAssetProp = AssetProp.id
    INNER JOIN AM_Asset AS Asset ON Asset.cardid = AssetCard.cardid AND AssetCard.isActive = 1
WHERE 1 = 1 AND (Asset.srcvoucherdate >= '2012-05-01' AND Asset.srcvoucherdate < dateadd(DAY,1,'2012-06-30')) AND Asset.idprocesstype = 'AF3B75A8-CB29-43C6-B829-1F4A475347C5' AND (1 = 1) GROUP BY AssetProp.Id,AssetProp.Name
UNION ALL
SELECT AssetProp.Id AS idAssetProp
      ,AssetProp.Name AS AssetPropName
      ,sum(AssetCard.origValue) AS OrigValue
      ,sum(AssetCard.totalDepr) AS TotalDepr
      ,sum(AssetCard.netamount) AS NetAmount
      ,sum(0) AS MonthDeprAmount
FROM AM_Asset AS AssetCard
    LEFT JOIN AA_AssetProp AS AssetProp ON AssetCard.idAssetProp = AssetProp.id
WHERE 1 = 1 AND AssetCard.isActive = 1 AND EXISTS (SELECT id
                                                   FROM AM_Asset AS Asset
                                                   WHERE (Asset.srcvoucherdate >= '2012-05-01' AND Asset.srcvoucherdate < dateadd(DAY,1,'2012-06-30')) AND Asset.idprocesstype = 'AF3B75A8-CB29-43C6-B829-1F4A475347C5' AND (1 = 1) AND Asset.cardid = AssetCard.cardid) GROUP BY AssetProp.Id,AssetProp.Name

 

查询结果:

idAssetProp AssetPropName OrigValue TotalDepr NetAmount MonthDeprAmount
60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 0 0 0 291.02
60F10FBD-BD4E-44DA-9736-12C00DEC44E3 固定资产 9000 897.27 8102.73 0

然后对上述结果求和便可达到要求

 

 

 

 

posted on 2013-01-08 19:47  @version  阅读(1699)  评论(0编辑  收藏  举报