Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 如何获取ID级别的数据_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 如何获取ID级别的数据

Sql 如何获取ID级别的数据,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个名为ID_info的表,示例数据为: Info_ID Type Desc 1 S Secondary 1 V Vertical 2 U Uniform 3 I Industry 3 F First 所以我需要一个列,告诉我不同的ID。计数的第一行应为数字,后续行应为空,因此我的输出应为: Info_ID Type Desc Count_

我有一个名为ID_info的表,示例数据为:

Info_ID   Type  Desc
1         S     Secondary
1         V     Vertical
2         U     Uniform
3         I     Industry
3         F     First
所以我需要一个列,告诉我不同的ID。计数的第一行应为数字,后续行应为空,因此我的输出应为:

   Info_ID   Type  Desc        Count_Info_ID
    1         S     Secondary   2
    1         V     Vertical    NULL
    2         U     Uniform     1
    3         I     Industry    2
    3         F     First       NULL

如果顺序不重要,那么应该这样做:

;WITH CTE AS
(
    SELECT  *, 
            COUNT(*) OVER(PARTITION BY Info_ID) Count_Info_ID, 
            ROW_NUMBER() OVER(PARTITION BY Info_ID ORDER BY Info_ID) RN
    FROM YourTable
)
SELECT  Info_ID,
        [Type],
        [Desc],
        CASE WHEN RN = 1 THEN Count_Info_ID END Count_Info_ID
FROM CTE
让你试试

结果是:

╔═════════╦══════╦═══════════╦═══════════════╗
║ Info_ID ║ Type ║   Desc    ║ Count_Info_ID ║
╠═════════╬══════╬═══════════╬═══════════════╣
║       1 ║ S    ║ Secondary ║ 2             ║
║       1 ║ V    ║ Vertical  ║ NULL          ║
║       2 ║ U    ║ Uniform   ║ 1             ║
║       3 ║ I    ║ Industry  ║ 2             ║
║       3 ║ F    ║ First     ║ NULL          ║
╚═════════╩══════╩═══════════╩═══════════════╝

如果顺序不重要,那么应该这样做:

;WITH CTE AS
(
    SELECT  *, 
            COUNT(*) OVER(PARTITION BY Info_ID) Count_Info_ID, 
            ROW_NUMBER() OVER(PARTITION BY Info_ID ORDER BY Info_ID) RN
    FROM YourTable
)
SELECT  Info_ID,
        [Type],
        [Desc],
        CASE WHEN RN = 1 THEN Count_Info_ID END Count_Info_ID
FROM CTE
让你试试

结果是:

╔═════════╦══════╦═══════════╦═══════════════╗
║ Info_ID ║ Type ║   Desc    ║ Count_Info_ID ║
╠═════════╬══════╬═══════════╬═══════════════╣
║       1 ║ S    ║ Secondary ║ 2             ║
║       1 ║ V    ║ Vertical  ║ NULL          ║
║       2 ║ U    ║ Uniform   ║ 1             ║
║       3 ║ I    ║ Industry  ║ 2             ║
║       3 ║ F    ║ First     ║ NULL          ║
╚═════════╩══════╩═══════════╩═══════════════╝

SQL数据本质上是未排序的…是否有任何内容(除了显示的“顺序”之外)也就是说,哪条记录是第一条/第二条/第三条?你能将这种格式保留在前端,而不是试图通过sql强制执行吗?@第十二条只要计数是,顺序就无关紧要。sql数据中的任何一条都是天生未排序的……是否有任何内容(除了显示的“顺序”之外)也就是说,哪条记录是第一条/第二条/第三条?你能将这种格式保留在前端,而不是通过sql强制执行吗?只要计数是行中的任何一条,顺序就不重要了