2
我有以下三個表:是否可以在select語句中包含子查詢?
dbo_CURRENCYRATES
+-------------+---------+---------------+
|CURRENCY_ID |BUY_RATE |DATE_EFFECTIVE |
+-------------+---------+---------------+
|GBP |1.5 |01/01/2000 |
|USD |2.5 |01/01/2000 |
|EUR |0.5 |01/01/2000 |
|GBP |1.7 |01/01/2017 |
|USD |2.7 |01/01/2017 |
|EUR |0.7 |01/01/2017 |
+-------------+---------+---------------+
dbo_DISCOUNTRATES
+-------------+--------------+
|DISCOUNT |DISCOUNT_RATE |
+-------------+--------------+
|50 |0.5 |
|25 |0.25 |
|35 |0.35 |
+-------------+--------------+
dbo_CUSTOMER
+-------+---------------+---------+----------+
|ID |NAME |CURRENCY | DISCOUNT |
+-------+---------------+---------+----------+
|1 |Widgets INC |USD |50 |
|2 |Widgets GMBH |EUR |35 |
|3 |Widgets PLC |GBP |25 |
+-------+---------------+---------+----------+
和查詢
CurrentExchangeRate
+--------------------------------------------+
SELECT
a.CURRENCY_ID
,a.BUY_RATE
FROM dbo_CURRENCYRATES AS t
INNER JOIN
(
SELECT
CURRENCY_ID
,MAX(DATE_EFFECTIVE) AS MaxDate
FROM dbo_CURRENCYRATES
GROUP BY dbo_CURRENCYRATES.CURRENCY_ID
) AS tm
ON (a.CURRENCY_ID = b.CURRENCY_ID)
AND (a.DATE_EFFECTIVE = b.MaxDate);
我具有從dbo_CUSTOMER選擇數據的選擇查詢,其包括貨幣和折扣。
SELECT
dbo_CUSTOMER.ID
,dbo_CUSTOMER.NAME
,dbo_CUSTOMER.CURRENCY_ID AS [CURRENCY]
,BUY_RATE
,dbo_CUSTOMER.DISCOUNT
,DISCOUNT_RATE
FROM dbo_CUSTOMER
WHERE ID = '1';
是可以在此查詢,子查詢,它可以讓我得到了貨幣BUY_RATE(從一個單獨的查詢),並通過查詢另一個表的恰當的折現率包括哪些內容?
我有一個單獨的查詢來獲得貨幣匯率,因爲我需要具有特定貨幣的最新值。
所以,在僞代碼,我可以做到這一點:
SELECT
dbo_CUSTOMER.ID
,dbo_CUSTOMER.NAME
,dbo_CUSTOMER.CURRENCY_ID AS [CURRENCY]
,dbo_CUSTOMER.DISCOUNT
,(
SELECT BUY_RATE
FROM CurrentExchangeRate
WHERE CurrentExchangeRate.CURRENCY_ID = [CURRENCY]
) as BUY_RATE
,(
SELECT DISCOUNT_RATE
FROM dbo_DISCOUNTRATES
WHERE dbo_DISCOUNTRATES.DISCOUNT = dbo_CUSTOMER.DISCOUNT
) as DISCOUNT_RATE
FROM dbo_CUSTOMER
WHERE ID = '1';
是可以做到這一點,首先在查詢其次在訪問數據庫?
謝謝
是的,你可以(在一個查詢 - 我期望在訪問數據庫以及)。 – AlexT82
在示例中,您顯示子查詢必須返回單個記錄 - 所有記錄的值相同。這通常是使用聚合查詢或TOP 1完成的。由於在子查詢中有動態條件,我希望您確實需要將查詢連接到表。查看http://allenbrowne.com/subquery-01.html#TopN – June7