这还是城主提出的问题,感觉很有意思,
比如一个记录表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类型的长度不好确定。
应该还有其他好的方法,哪位仁兄提供一个吧
比如一个记录表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注册。