zoukankan      html  css  js  c++  java
  • 查询出每个类型的前3个

    这还是城主提出的问题,感觉很有意思,
    比如一个记录表products,里面有个主键id,一个类型TYPEID,就是查询出每个TYPEID的前3个记录,还有一个类型表productstype

    可是我sql还是太菜。还是请假了夕颜兄
    夕颜还是使用sql自拼接来解决这个问题。

    DECLARE @SQL VARCHAR(8000)
    SET @SQL=''
    SELECT @SQL=@SQL+'SELECT TOP 3 distinct typeid FROM PRODUCTS WHERE TYPEID = '''+CAST(ISNULL(TYPEID,'') AS VARCHAR)+''' UNION ' FROM PRODUCTTYPE
    SET @SQL=SUBSTRING(@SQL,0,LEN(@SQL)-4)+'ORDER BY TYPEID'
    PRINT @SQL
    EXEC(@SQL)

    或者
    DECLARE @SQL VARCHAR(8000)
    SET @SQL=''
    SELECT @SQL=@SQL+'SELECT TOP 5 * FROM PRODUCTS WHERE TYPEID = '''+CAST(TYPEID AS VARCHAR)+''' UNION '
    FROM (SELECT DISTINCT TypeID FROM Products) t
    SET @SQL=SUBSTRING(@SQL,0,LEN(@SQL)-4)+'ORDER BY TYPEID'
    PRINT @SQL
    EXEC(@SQL)

    他们效果是等同的。
    使用这样的方法可以解决问题,也比较灵活了。但是夕颜说这个是下下策,因为sql类型的长度不好确定。

    应该还有其他好的方法,哪位仁兄提供一个吧

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    异常处理基本语法
    数字取舍(trunc round ceil floor)
    关于union的理解
    SQL Loader 导入EXCEL 数据到ORACLE 数据库
    临时表的使用方法
    对外投资
    存货盘盈盘亏核算
    现金流量表补充资料的编制公式
    会计科目的具体定义
    中英文职位对照之 会计与财务
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319450.html
Copyright © 2011-2022 走看看