查找SQL或SSR中记录组中的字母
我有以下数据(我有更多的行,这只是一个示例): 在reporting services或MSSQL中,我需要按车队分组。分组后,我希望它看到每个组包含哪些值 如果组包含值p和B,则其生产 如果该组仅包含B,则该组正在报告 如果组中包含P,则其生产率 我想从这个例子中得到的是最后返回的以下行查找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
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