Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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中具有特定列计数的表中的所有列?_Sql_Sql Server - Fatal编程技术网

如何选择SQL中具有特定列计数的表中的所有列?

如何选择SQL中具有特定列计数的表中的所有列?,sql,sql-server,Sql,Sql Server,假设我有以下专栏: 表格编号 产品标识 日期 注意:每个表单ID可以有一个以上的产品ID,我想按产品ID出现的次数对所有数据进行排序 SELECT * , COUNT(Product_ID) AS indicator from my_database.inv_table GROUP BY (Product_ID) ORDER BY indicator DESC 有什么想法和帮助吗?谢谢。使用相关子查询进行计数: SELECT t1.*, (select COUNT(*) from my_dat

假设我有以下专栏:

  • 表格编号
  • 产品标识
  • 日期
  • 注意:每个表单ID可以有一个以上的产品ID,我想按产品ID出现的次数对所有数据进行排序

    SELECT * , COUNT(Product_ID) AS indicator
    from my_database.inv_table
    GROUP BY (Product_ID)
    ORDER BY indicator DESC
    

    有什么想法和帮助吗?谢谢。

    使用相关子查询进行计数:

    SELECT t1.*, (select COUNT(*) from my_database.inv_table t2
                  where t1.Form_ID = t2.Form_ID) AS indicator
    from my_database.inv_table t1
    ORDER BY indicator DESC
    
    您可以在(按产品ID划分)上使用
    Count(*)

    不需要选择
    指示符
    -列,如果不需要,也可以在
    按顺序
    中使用
    计数(*)Over(按产品ID划分)


    MSDN:

    请显示输入和预期输出的示例。这将使问题更容易回答understand@ASh对不起,描述得不够清楚。你可以说像'F09123'、'F21378'、'F25632'之类的表单ID,对于产品ID,让我们说'P0001'、'P0002'、'P0003'等等。我想要得到的是所有数据(表单ID、产品ID、日期),按产品ID的出现次数排序。这对你有帮助吗?这会有用,但是请查看Tim Schmelter回答中的
    over
    子句:)请在这里解释逻辑,以便我能理解。:)@但是,我认为应该是t1.Product\u ID=t2.Product\u ID,不是吗?因为我是基于Product_ID.cmiiwad一些样本数据和问题的预期结果计算的,我可以调整我的答案。如果有10列呢?我必须描述所有的专栏吗?或者,我可以像往常一样用*替换列吗?@Ray:当然可以使用
    *
    但是;)
    SELECT Form_ID, Product_ID, Date, 
           Indicator = Count(*) Over (Partition by Product_ID)
    FROM my_database.inv_table
    ORDER BY Indicator DESC