Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 消除重复和合并信息_Sql_Sql Server 2012 - Fatal编程技术网

Sql 消除重复和合并信息

Sql 消除重复和合并信息,sql,sql-server-2012,Sql,Sql Server 2012,目前正在编写一个SQL Server查询,其中显示了一大堆信息,目前正在输出正确的信息,但大部分信息是重复的,某些区域应该合并。请注意,StateAcronym部分实际上是一个新的部分-在添加StateAcronym之前,它工作得很好,但随后它就完全重复/不合并了-类似于 我的代码: DECLARE @BulkInfo TABLE ( ZoneID INT, ZoneName VARCHAR(100), StateAcronym VARCHAR(5), SiteI

目前正在编写一个SQL Server查询,其中显示了一大堆信息,目前正在输出正确的信息,但大部分信息是重复的,某些区域应该合并。请注意,
StateAcronym
部分实际上是一个新的部分-在添加
StateAcronym
之前,它工作得很好,但随后它就完全重复/不合并了-类似于

我的代码:

DECLARE @BulkInfo TABLE (
       ZoneID INT,
   ZoneName VARCHAR(100),
   StateAcronym VARCHAR(5),
   SiteID BIGINT,
   SiteGroupID INT,
   Papers BIGINT
    );

INSERT INTO @BulkInfo (ZoneID, ZoneName, StateAcronym, SiteID, SiteGroupID, Papers)
   SELECT DISTINCT
    z.ZoneID,
    ISNULL(z.ZoneName,'NO ZONE'),
    (case when z.ZoneName is not null and z.ZoneName <> 'No Zone'
          then st.StateAcronym
    else null
        end) as StateAcronym,
    s.SiteID,
    wfset.SiteEventID,
    COUNT(distinct c.PaperID) Papers
   FROM 
      Sites s 
   LEFT JOIN 
      SiteLoc sl ON s.SiteID = sl.SiteID
   LEFT JOIN 
      States st ON sl.StateID = st.StateID
   LEFT JOIN 
      Zones z ON sl.ZoneID = z.ZoneID
   LEFT JOIN 
      WFSite wfse ON s.SiteID = wfse.SiteID AND StatusID IN (1,2)
   LEFT JOIN 
      WFSiteTypes wfset ON wfse.TypeID = wfset.TypeID
   LEFT JOIN 
      Papers c ON s.SiteID = c.SiteID
   WHERE
    s.ProjectID = 110
   GROUP BY 
    z.ZoneID,
    z.ZoneName,
    st.StateAcronym,
    s.SiteID,
    wfset.SiteGroupID,
    wfse.TypeID

SELECT DISTINCT
    t.ZoneName,
    t.StateAcronym,
    TotalSites,
    TotalPapers,
    CONVERT(DECIMAL(10,2),TotPer) 'TotPer%',
    ISNULL(TotalSitesType1, 0) TotalSitesType1,
    ISNULL(TotalPapersType1, 0) TotalPapersType1,
    ISNULL(CONVERT(DECIMAL(10,2),Type1Per),0) 'Type1Per%',
    ISNULL(TotalSitesType2,0) TotalSitesType2,
    ISNULL(TotalPapersType2,0) TotalPapersType2,
    ISNULL(CONVERT(DECIMAL(10,2),Type2Per),0) 'Type2Per%',
    ISNULL(TotalSitesType3, 0) TotalSitesType3,
    ISNULL(TotalPapersType3, 0) TotalPapersType3,
    ISNULL(CONVERT(DECIMAL(10,2),Type3Per),0) 'Type3Per%',
    ISNULL(TotalSitesType4,0) TotalSitesType4,
    ISNULL(TotalPapersType4,0) TotalPapersType4,
    ISNULL(CONVERT(DECIMAL(10,2),Type4Per),0) 'Type4Per%',
    ISNULL(TotalSitesType5,0) TotalSitesType5,
    ISNULL(TotalPapersType5,0) TotalPapersType5,
    ISNULL(CONVERT(DECIMAL(10,2),Type5Per),0) 'Type5Per%',
    ISNULL(TotalSitesType6,0) TotalSitesType6,
    ISNULL(TotalPapersType6,0) TotalPapersType6,
    ISNULL(CONVERT(DECIMAL(10,2),Type6Per),0) 'Type6Per%',
    ISNULL(TotalSitesType7,0) TotalSitesType7,
    ISNULL(TotalPapersType7,0) TotalPapersType7,
    ISNULL(CONVERT(DECIMAL(10,2),Type7Per),0) 'Type7Per%'
FROM 
(SELECT
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSites,
    SUM(distinct Papers) TotalPapers,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) TotPer
FROM 
    @BulkInfo
GROUP BY ZoneName,StateAcronym) t
LEFT JOIN 
(SELECT
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSitesType1,
    SUM(distinct Papers) TotalPapersType1,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) Type1Per
FROM 
    @BulkInfo
WHERE 
    SiteGroupID = 2
GROUP BY ZoneName,StateAcronym) f ON t.ZoneName = f.ZoneName
LEFT JOIN 
(SELECT
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSitesType2,
    SUM(distinct Papers) TotalPapersType2,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) Type2Per
FROM 
    @BulkInfo
WHERE 
    SiteGroupID = 3
GROUP BY ZoneName,StateAcronym) o ON t.ZoneName = o.ZoneName
LEFT JOIN 
(SELECT
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSitesType3,
    SUM(distinct Papers) TotalPapersType3,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) Type3Per
FROM 
    @BulkInfo
WHERE 
    SiteGroupID = 4
GROUP BY ZoneName,StateAcronym) fm ON t.ZoneName = fm.ZoneName
LEFT JOIN 
(SELECT
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSitesType4,
    SUM(distinct Papers) TotalPapersType4,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) Type4Per
FROM 
    @BulkInfo
WHERE 
    SiteGroupID = 6
GROUP BY ZoneName,StateAcronym) r ON t.ZoneName = r.ZoneName
LEFT JOIN 
(SELECT
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSitesType5,
    SUM(distinct Papers) TotalPapersType5,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) Type5Per
FROM 
    @BulkInfo
WHERE 
    SiteGroupID = 7
GROUP BY ZoneName,StateAcronym) cs ON t.ZoneName = cs.ZoneName
LEFT JOIN 
(SELECT
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSitesType6,
    SUM(distinct Papers) TotalPapersType6,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) Type6Per
FROM 
    @BulkInfo
WHERE 
    SiteGroupID = 9
GROUP BY ZoneName,StateAcronym) d ON t.ZoneName = d.ZoneName
LEFT JOIN 
(SELECT
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSitesType7,
    SUM(distinct Papers) TotalPapersType7,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) Type7Per
FROM 
    @BulkInfo
WHERE 
    SiteGroupID = 8
GROUP BY ZoneName,StateAcronym) m ON t.ZoneName = m.ZoneName

ORDER BY t.ZoneName, t.StateShortCode

我理解为什么会有点不对劲,因为同一个区域可以分配给不同的州首字母缩略词,但我不确定为什么它仍然显示多个,并且不合并信息。如果查看输出,您会发现实际上没有任何重复项

我猜您的子查询返回了多个
StateAcronym
值,因此需要将
JOIN
条件更改为:

ON t.ZoneName = f.ZoneName
 AND t.StateAcronym = f.StateAcronym
在这种情况下,一个简单的测试是运行一个子查询,仅限于一个
ZoneName
,我打赌如果您运行:

SELECT 
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSites,
    SUM(distinct Papers) TotalPapers,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) TotPer
FROM  @BulkInfo
WHERE ZoneName = 'ZoneName1'
GROUP BY ZoneName,StateAcronym

由于不同的
StateAcronym
值,您将得到不止一行。

我在提供的示例输出中没有看到重复项。我想我是想使用不同的单词,但从技术上讲,我希望看到的是两行带有ZoneName1 | NJ。。。。以及宾夕法尼亚州第1区。。。。。我不确定为什么某些区域产生不同的数字,并且没有将信息合并到一个不同的行中。对于
TotalSitesType2
,对于
ZoneName1
,有两个不同的值,这是为什么?
SELECT 
    ZoneName,
    StateAcronym,
    COUNT(distinct SiteID) TotalSites,
    SUM(distinct Papers) TotalPapers,
    SUM(distinct Papers)*100.0/(SELECT SUM(distinct Papers) FROM @BulkInfo) TotPer
FROM  @BulkInfo
WHERE ZoneName = 'ZoneName1'
GROUP BY ZoneName,StateAcronym