Sql 在嵌套子查询中使用Select Distinct
我有一个select distinct查询,用于标识位置IDpk。但我想确定最终用户的位置名称。我以为子查询会返回它。但它返回的值为1。而不是单独运行select distinct查询时的实际位置ID。我似乎不明白为什么Sql 在嵌套子查询中使用Select Distinct,sql,ms-access-2007,Sql,Ms Access 2007,我有一个select distinct查询,用于标识位置IDpk。但我想确定最终用户的位置名称。我以为子查询会返回它。但它返回的值为1。而不是单独运行select distinct查询时的实际位置ID。我似乎不明白为什么 SELECT Location.LocationID, Location.Location FROM Location WHERE (Location.LocationID)=( SELECT Count(*) AS UniqueLocations FROM (
SELECT Location.LocationID, Location.Location
FROM Location
WHERE (Location.LocationID)=(
SELECT Count(*) AS UniqueLocations
FROM (
SELECT DISTINCT TransactionLocation
FROM Transactions
WHERE (Transactions.TransactionActivity) = [Enter Activity]
AND (Transactions.TransactionDate) BETWEEN [Enter the start date:] AND [Enter the end date:]
)
);
事务表
TransactionID(pk)| TransactionEmployee|TransactionActivity|TransactionLocation|Date
1 | 1001 | 1 | 25 | 01/01/2014
2 | 1002 | 1 | 25 | 01/02/2014
3 | 1003 | 1 | 25 | 01/03/2014
LocationID(pk)|Location Name
24 | Chicago
25 | Pittsburgh
26 | Boston
位置表
TransactionID(pk)| TransactionEmployee|TransactionActivity|TransactionLocation|Date
1 | 1001 | 1 | 25 | 01/01/2014
2 | 1002 | 1 | 25 | 01/02/2014
3 | 1003 | 1 | 25 | 01/03/2014
LocationID(pk)|Location Name
24 | Chicago
25 | Pittsburgh
26 | Boston
谢谢
迈克我想你可能想要这样的东西:
SELECT Location.LocationID, Location.Location
FROM Location
WHERE Location.LocationID IN
(SELECT DISTINCT TransactionLocation
FROM Transactions
WHERE Transactions.TransactionActivity = [Enter Activity]
AND Transactions.TransactionDate Between [Enter the start date:] And [Enter the end date:]);
我想你可能想要这样的东西:
SELECT Location.LocationID, Location.Location
FROM Location
WHERE Location.LocationID IN
(SELECT DISTINCT TransactionLocation
FROM Transactions
WHERE Transactions.TransactionActivity = [Enter Activity]
AND Transactions.TransactionDate Between [Enter the start date:] And [Enter the end date:]);
我想知道你想要实现什么。您想要ID等于两个给定日期之间发生给定活动的不同TransactionLocation数量的位置吗?我无法理解这一点=/Yes,选择Count*作为UniqueLocations,从中选择DISTINCT TransactionLocation FROM Transactions.TransactionActivity=[Enter Activity]和Transactions.TransactionDate在[Enter the start date:]和[Enter the end date:]之间;应该等于25。尽可能使用SO的内置标记格式,而不是像代码格式中的新行那样使用HTML标记。为什么您认为它应该等于25?从您的示例中我可以看出,从Transactions中选择不同的TransactionLocation,其中Transactions.TransactionActivity=[Enter Activity]和Transactions.TransactionDate在[Enter the start date:]和[Enter the end date:]之间确实返回25,但是你放在它周围的SELECT COUNT*将返回1,因为只有1个值,即25。它返回1而不是25的原因是你使用了COUNT,并且只返回了一个项目。我正在试图弄清楚你想要实现什么。您想要ID等于两个给定日期之间发生给定活动的不同TransactionLocation数量的位置吗?我无法理解这一点=/Yes,选择Count*作为UniqueLocations,从中选择DISTINCT TransactionLocation FROM Transactions.TransactionActivity=[Enter Activity]和Transactions.TransactionDate在[Enter the start date:]和[Enter the end date:]之间;应该等于25。尽可能使用SO的内置标记格式,而不是像代码格式中的新行那样使用HTML标记。为什么您认为它应该等于25?从您的示例中我可以看出,从Transactions中选择不同的TransactionLocation,其中Transactions.TransactionActivity=[Enter Activity]和Transactions.TransactionDate在[Enter the start date:]和[Enter the end date:]之间确实返回25,但您在其周围放置的SELECT COUNT*将返回1,因为只有1个值,即25。它返回1而不是25的原因是您使用了COUNT,并且只返回了一个项目。