查找SQL或SSR中记录组中的字母

查找SQL或SSR中记录组中的字母,sql,reportingservices-2005,Sql,Reportingservices 2005,我有以下数据(我有更多的行,这只是一个示例): 在reporting services或MSSQL中,我需要按车队分组。分组后,我希望它看到每个组包含哪些值 如果组包含值p和B,则其生产 如果该组仅包含B,则该组正在报告 如果组中包含P,则其生产率 我想从这个例子中得到的是最后返回的以下行 VALUE LOCATION FLEET REGION Production Pocatello,ID 104 232 Reporti

我有以下数据(我有更多的行,这只是一个示例):

在reporting services或MSSQL中,我需要按车队分组。分组后,我希望它看到每个组包含哪些值

如果组包含值p和B,则其生产 如果该组仅包含B,则该组正在报告 如果组中包含P,则其生产率

我想从这个例子中得到的是最后返回的以下行

VALUE         LOCATION           FLEET    REGION
Production     Pocatello,ID       104       232
Reporting      Spokane, WAS       107       232
现在,SQL查询在我的问题顶部报告数据。我需要进行分组和计算,无论是MSSQL还是SSRS,任何一个都可以,但我如何进行分组和计算,以获得上面列出的数据

谢谢

如果没有表定义,很难说。示例数据中已经有一个完整的副本,这表明表中没有主键。每个车队的位置是否始终相同?那这个地区呢?如果这实际上是连接表的另一个查询的结果集,那么您应该提到这一点,并包括各个表的表定义

以下是我的最佳猜测,可能会为您指明正确的方向:

SELECT
    CASE
        WHEN MIN(value) = 'B' THEN
            CASE
                WHEN MAX(value) = 'P' THEN 'Production'
                ELSE 'Reporting'
            END
        WHEN MAX(value) = 'P' THEN 'Productivity'
        ELSE NULL
    END,
    location,
    fleet,
    region
FROM
    Some_Table
GROUP BY
    location,
    fleet,
    region

这取决于它们仅是“value”的两个可能值,否则不容易调整。

您可以在其他列上分组,如果
p
B
案例中
语句:

declare @t table (value char(1), Location varchar(50), fleet int, region int)

insert @t values
    ('P',       'Pocatello, ID',        104,       232),
    ('B',       'Pocatello, ID',        104,       232),
    ('B',       'Spokane, WA',          107,       232),
    ('B',       'Spokane, WA',          107,       232);

select  case 
            when max(case when value = 'P' then 1 end) = 1 
                 and max(case when value = 'B' then 1 end) = 1 then 'Production' 
            when max(case when value = 'P' then 1 end) = 1 then 'Productivity' 
            when max(case when value = 'B' then 1 end) = 1 then 'Reporting' 
        end
,       location   
,       fleet
,       region
from    @t
group by
        location   
,       fleet
,       region
这张照片是:

(No column name)    location        fleet   region
Production          Pocatello, ID   104     232
Reporting           Spokane, WA     107     232
(No column name)    location        fleet   region
Production          Pocatello, ID   104     232
Reporting           Spokane, WA     107     232
Select Fleet
    , Min(Case
        When ValueCount.PCount = 1 And ValueCount.BCount = 1 Then 'Production'
        When ValueCount.PCount = 1 And ValueCount.BCount = 0 Then 'Productivity'
        Else 'Reporting'
        End) As Value
    , Min(Location) As Location
    , Min(Region) As Region
From Table
    Join    (
            Select Fleet
                , Sum( Case When T2.Value = 'P' Then 1 Else 0 End ) As PCount
                , Sum( Case When T2.Value = 'B' Then 1 Else 0 End ) As BCount
            From Table As T2
            Where T2.Value In('P','B')
            Group By T2.Fleet
            ) As ValueCount
        On ValueCount.Fleet = Table.Fleet
Group By Fleet