【问题标题】:"Distinct" column in SQL querySQL 查询中的“不同”列
【发布时间】:2011-03-18 20:58:18
【问题描述】:

选择 id,EmpNo 来自员工表

EmpNo 可以与上述查询结果中的 1 条或多条记录相同。我现在想添加从 EmpNo 派生的另一列(我们称之为 EmpNo2),但只返回 EmpNo 的不同值。

例如,如果上面的查询返回 100 条记录,但有 69 个不同的 EmpNo 值,我将查询修改为

SELECT id, EmpNo, Distinct EmpNo2
FROM  EmployeesTable EmpNo 

, 我希望返回所有 100 行,但最后一列 EmpNo2 应返回 EmpNo 字段的 69 个不同值。

但正如已经知道的那样,以这种方式使用 distinct 会导致错误,但我想实现这样的功能 - 并且子查询没有帮助。

样品要求的结果

   ID  EmpNo   EmpNo2

    1  0T4/HR 0T4/HR
    1  0T4/HR 2VP/E
    1  0T4/HR xT9/67
    1  0T4/HR 
    1  0T4/HR 
    2  2VP/E 
    2  2VP/E
    2  2VP/E 
    2  2VP/E 
    2  2VP/E 
    3  XT9/67 
    3  XT9/67 
    3  xT9/67 
    3  XT9/67 

【问题讨论】:

  • 我想在 SSRS 报告中使用 EmpNo2 值作为下拉列表参数列表。我想这样做是因为 SSRS 2005 中没有多数据集支持
  • 你可能希望添加一个SSRS标签,然后。
  • 什么鬼?向我们提供有关您的架构(表)以及一些示例数据和一些示例结果的更多信息...
  • 正如 Andreas 所说,需要一些示例数据和结果,正如我所读,您希望在同一记录集中为前两列返回 100 行,为最后一列返回 69 行。你能澄清一下吗?
  • 您可以在reporting services 2005 中创建多个数据集,但每个数据区域只能有一个源。因此,将下拉列表放在不同的数据区域中。

标签: sql-server-2005 tsql reportingservices-2005 reporting-services


【解决方案1】:

怎么样:

Select id, empno, empno2
from employeestable left outer join (
 SELECT min([id]) as minid
      ,[empno] empno2
  FROM [EmployeesTable]
group by empno) etab2 on employeestable.id = etab2.minid

您是说子查询不起作用 - 为什么不呢?

【讨论】:

  • 这可能有效。但是 empno2 仍然返回与 empno 相同的行数,现在正在寻找的解决方案是让 empno2 只返回 empno 的不同值。任何帮助。
  • 你想要的,就是上面的查询所做的(加上NULLS)。您不能让 empno2 返回更少的行:所有列在查询中具有相同的行数。编辑:我不知道 SSRS,但你不能只使用我在答案中的子查询作为下拉列表的来源吗?
  • 问题在于参数下拉列表必须从主查询(报表查询)返回的列中选择,因为 SSRS 2005 不支持单个报表中的多个数据集。指定下拉列表的来源时,我只能从报告查询返回的列中指定一列。 __________目前能够做到这一点,但现在下拉列表中有相同值的重复选项。
  • 当您尝试我发布的查询时会发生什么?你得到一个带有一堆 NULL 行的下拉框吗?这似乎是 SSRS 中一个相当有趣的缺点,SSRS 专家应该能够帮助您。
  • Tobiasopdenbrouw,当我运行您的查询时,我得到了所有记录(包括重复记录)。很想删除重复项。
【解决方案2】:

您的要求不清楚,我也掌握的信息很少。以下是您需要的。这可能会更好,但这只是一种尝试。

declare @temp table
(
    uniqueid int identity(1, 1),
    id int,
    empno varchar(50),
    empno2 varchar(50)
)

insert into @temp  select   1,  '0T4/HR', null
insert into @temp select     1,  '0T4/HR' , null
insert into @temp select     1 , '0T4/HR' , null
insert into @temp select     1,  '0T4/HR' , null
insert into @temp select     1,  '0T4/HR'  , null
insert into @temp select     2,  '2VP/E'  , null
insert into @temp select     2,  '2VP/E' , null
insert into @temp select     2,  '2VP/E'  , null
insert into @temp select     2,  '2VP/E'  , null
insert into @temp select     2,  '2VP/E'  , null
insert into @temp select     3,  'XT9/67'  , null
insert into @temp select     3,  'XT9/67'  , null
insert into @temp select     3,  'xT9/67'  , null
insert into @temp select     3,  'XT9/67'  , null

SELECT ROW_NUMBER() OVER (ORDER BY id) AS id, empno into #temp FROM @temp group by empno, id

update @temp set empno2 = t2.empno
from @temp t inner join #temp t2 on t.uniqueid = t2.id

select * from @temp

drop table #temp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    相关资源
    最近更新 更多