【问题标题】:How to Show logical Ids on table如何在表上显示逻辑 ID
【发布时间】:2014-03-12 05:38:26
【问题描述】:

我有如下所示的员工表和他们的楼层:

ID        EmployeeId   EmpName  FloorId       

1           abc123       abc       1      
2           xyz123       xyz       1
3           def123       def       2
4           pqr123       pqr       2

我已经按楼层显示了表格的结果,但是当我显示 2 楼的员工时,我希望结果显示如下:

select * from tblname where FloorId=2

ID        EmployeeId   EmpName  FloorId 

1           def123       def       2
2           pqr123       pqr       2

【问题讨论】:

  • C#, asp.net, sql, sql-server, sql-server-2008 - 您已在此处标记所有内容。你想要这个结果在哪里?在 SQL 或 C# 中?您希望我们如何理解这一点,您为什么不过滤条件为FloorId = 2 的记录?!
  • 我想要 sql 中的结果。我已经过滤了 FloorId=2 的记录,但它显示 Id 为 3 和 4,我想成为 1 和 2。
  • 您可以发布您尝试过的内容吗?
  • select * from tblname where FloorId=2
  • 你可以使用 Raging Bull 的例子。它会解决你的问题。

标签: c# asp.net sql sql-server sql-server-2008


【解决方案1】:

您可以使用ROW_NUMBER()。它返回结果集分区内行的序号,每个分区的第一行从 1 开始。

试试这个:

SELECT ROW_NUMBER() OVER(ORDER BY ID) as ID,EmployeeId,EmpName,FloorId 
FROM tableName 
WHERE FloorId=2

结果会是这样的:

ID  EMPLOYEEID  EMPNAME FLOORID
1   def123      def     2
2   pqr123      pqr     2

SQL Fiddle 中查看结果。

阅读更多关于ROW_NUMBER()here的信息。

【讨论】:

    【解决方案2】:
    DECLARE  @TableName TABLE 
        ([ID] int, [EmployeeId] varchar(6), [EmpName] varchar(3), [FloorId] int)
    ;
    
    INSERT INTO @TableName
        ([ID], [EmployeeId], [EmpName], [FloorId])
    VALUES
        (1, 'abc123', 'abc', 1),
        (2, 'xyz123', 'xyz', 1),
        (3, 'def123', 'def', 2),
        (4, 'pqr123', 'pqr', 2)
    ;
    ;WITH CTE AS
    (
    select ID,EmployeeId,EmpName,ROW_NUMBER()OVER( ORDER BY ID ) RN,FloorId  from @TableName
    )
    select * from CTE 
    WHERE FLOORid = 2
    

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2016-08-01
      • 2020-10-18
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多