Order by不适用于union、microsoft access数据库、asp.net
我想从数据库中获取数据的百分比为基础的费率字段,也我想显示数据随机 所以我试过这个Order by不适用于union、microsoft access数据库、asp.net,asp.net,ms-access,union,Asp.net,Ms Access,Union,我想从数据库中获取数据的百分比为基础的费率字段,也我想显示数据随机 所以我试过这个 string sql = "(SELECT TOP 100 PERCENT * FROM tbl_adv WHERE Stars = 7 ORDER BY Rnd(-(1000*adID)*Time())) UNION (SELECT TOP 84 PERCENT * FROM tbl_adv WHERE Stars = 6 ORDER BY Rnd(-(1000*adID)*Time())) UNION (SE
string sql = "(SELECT TOP 100 PERCENT * FROM tbl_adv WHERE Stars = 7 ORDER BY Rnd(-(1000*adID)*Time())) UNION (SELECT TOP 84 PERCENT * FROM tbl_adv WHERE Stars = 6 ORDER BY Rnd(-(1000*adID)*Time())) UNION (SELECT TOP 72 PERCENT * FROM tbl_adv WHERE Stars = 5 ORDER BY Rnd(-(1000*adID)*Time()))";
它显示正确的数据,但不是随机的,
有什么建议吗
我还提供了一个用于测试的示例,您可以从下面的链接下载
在联合中查询ORDER BY应应用于联合返回的整个集合 因此,从三个子选择中构建一组记录,然后将顺序应用于结果集
string sql = @"SELECT * FROM
(
SELECT TOP 100 PERCENT * FROM tbl_adv WHERE Stars = 7
UNION
SELECT TOP 84 PERCENT * FROM tbl_adv WHERE Stars = 6
UNION
SELECT TOP 72 PERCENT * FROM tbl_adv WHERE Stars = 5
)
ORDER BY Rnd(-(1000*adID)*Time())";
删除union和第二个select查询是否有效?是的,这一个单独有效:从tbl_adv中选择TOP 100%,其中Stars=7 ORDER BY Rnd(-(1000*adID)*Time())我测试了它,但它给出了以下错误:ORDER BY表达式(Rnd(-(1000*adID)*Time())包含查询未选择的字段。我还编辑了一个示例项目的下载链接。