Sql Server选择不同的记录和OrderBy NEWID()
这是存储过程,我需要选择不同的记录并以随机顺序显示它们,但我面临一个错误,即选择不同的记录不能与newid()一起使用,因此我如何解决这个问题Sql Server选择不同的记录和OrderBy NEWID(),sql,sql-server,Sql,Sql Server,这是存储过程,我需要选择不同的记录并以随机顺序显示它们,但我面临一个错误,即选择不同的记录不能与newid()一起使用,因此我如何解决这个问题 USE [OtlobODR] GO /****** Object: StoredProcedure [OtlobFood].[ListOffersItems] Script Date: 11/18/2012 13:01:34 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTE
USE [OtlobODR]
GO
/****** Object: StoredProcedure [OtlobFood].[ListOffersItems] Script Date: 11/18/2012 13:01:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [OtlobFood].[ListOffersItems]
@Fk_CampaignID int
as
select distinct
CampaignID, CampaignOffers.OldPrice
, dbo.ItemSizes.IS_Id,
, dbo.Items.[Item_Description_L2] as Item_Description
, dbo.Items.[Item_Image]
, dbo.Items.[Item_Details]
, dbo.ItemSizes.[IS_Price] as Price
-- if null then it is not a featured meal
, dbo.ProviderItems.[PI_Id] as ProviderItems_PI_ID
, dbo.ItemCategories.[ItemCat_Id]
, dbo.Providers.Provider_Name_L2 as Provider_Name
, dbo.Providers.Provider_Menu_Logo
, dbo.Providers.Provider_Id
FROM Items
INNER JOIN ProviderItems ON Items.Item_Id = ProviderItems.Item_Id
INNER JOIN dbo.ItemSizes ON dbo.Items.Item_Id = dbo.ItemSizes.Item_Id
INNER JOIN CampaignOffers ON CampaignOffers.ItemID = ItemSizes.IS_Id
INNER JOIN dbo.ItemCategories ON dbo.Items.ItemCat_Id = dbo.ItemCategories.ItemCat_Id
INNER JOIN dbo.Providers ON dbo.ProviderItems.Provider_Id = dbo.Providers.Provider_Id
INNER JOIN dbo.Branches ON dbo.Providers.Provider_Id = dbo.Branches.Provider_Id
where Fk_CampaignID=@Fk_CampaignID
group by NEWID(),
CampaignID, CampaignOffers.OldPrice ,
dbo.ItemSizes.IS_Id,
dbo.Items.[Item_Description_L2],
dbo.Items.[Item_Image],
dbo.Items.[Item_Details],
dbo.ItemSizes.IS_Id,
dbo.ItemSizes.[IS_Price] ,
-- if null then it is not a featured meal
dbo.ProviderItems.[PI_Id] ,
dbo.ItemCategories.[ItemCat_Id],
dbo.Providers.Provider_Name_L2,
dbo.Providers.Provider_Menu_Logo
,dbo.Branches.Branch_Id,
dbo.Providers.Provider_Id,CampaignID,CampaignOffers.OldPrice
order by NEWID()
这个查询没有多大意义,没有聚合,所以GROUPBY语句的用途是什么?通过NEWID()进行分组并不能得到任何分组
将多余的group by与DISTINCE子句结合起来,感觉更像是有一个连接条件不正确,导致了笛卡尔式,而您正拼命尝试使用distinct和group by来消除笛卡尔式,在语句中同时使用它们显然没有什么意义,并且应该删除group by中的newid。这个查询没有多大意义,没有聚合,所以group by语句的目的是什么?通过NEWID()进行分组并不能得到任何分组
将多余的group by与DISTINCE子句结合起来,感觉更像是有一个连接条件不正确,导致了笛卡尔式,而您正拼命尝试使用distinct和group by来消除笛卡尔式,在语句中同时使用它们显然没有什么意义,并且应该删除group by中的newid。您需要将SELECT DISTINCT推入内部查询(此时您也可能会丢失group by),然后在外部查询中执行newid()。一般形式是
select
newid(), X.*
from
(
select distinct <cols>
from <tables>
where <whatever>
) X
order by 1
您需要将SELECT DISTINCT推入一个内部查询(此时您还可能丢失GROUP BY),然后在外部查询中执行一个NEWID()。一般形式是
select
newid(), X.*
from
(
select distinct <cols>
from <tables>
where <whatever>
) X
order by 1
从查询中删除NEWID(),并用
SELECT * FROM (
<your query>
) as t
ORDER BY NEWID()
从中选择*(
)as t
NEWID()命令
从查询中删除NEWID(),并用
SELECT * FROM (
<your query>
) as t
ORDER BY NEWID()
从中选择*(
)as t
NEWID()命令