возможно, что подобные вопросы задавались ранее, но я не могу их найти.Так вот моя цель.У меня есть три таблицы, такие как 1.Bill 2.BillDetail 3.ExpenseInfo
.Таблица "Bill" имеет первичный ключ с именем "BillID
", который является внешним ключом таблицы "BillDetail".Аналогично, в таблице "ExpenseInfo" есть PK "ExpenseID
", который также является FK для "BillDetail".Данные, хранящиеся в этих таблицах, представлены в следующем формате.For 1 entry in Bill table, there might be 1 or more rows in BillDetail table where each row contains 1 ExpenseID
.Теперь я хочу написать запрос, который выберет такие данные, как -
BillID BillDate Fuel Food Travel
1 28-02-12 10 20 50
здесь Топливо, питание, поездки - это различные типы расходов, сохраненные в таблице «ExpenseInfo».Я попробовал ниже.Я иду правильным путем или существует какой-то другой умный способ сделать это?
SELECT *
FROM t_BillInfoDetail a
LEFT OUTER JOIN
(
SELECT ISNULL(ExpenseID,0) AS ExpenseID, ISNULL(ExpenseName,'N/A') AS ExpenseName
FROM t_expenseinfo
WHERE ExpenseID=1
) AS LocalTravel ON a.ExpenseID = LocalTravel.ExpenseID
Недавно добавлено Спасибо всем за ваши ответы.В настоящее время я делаю как ниже для моей цели.Надеюсь, вам понравится.
SELECT
BI.* , BID.ExpenseID, BID.BillDescription, BID.LocalTravel, BID.LocalHotel, BID.Fuel
FROM
(
SELECT *
FROM t_BillInfo
WHERE BillID = 1
) AS BI
LEFT OUTER JOIN
(
SELECT BillID, BillDescription, ExpenseID,
ISNULL(SUM(CASE ExpenseID WHEN 1 THEN Amount ELSE 0 END), 0) AS LocalTravel,
ISNULL(SUM(CASE ExpenseID WHEN 2 THEN Amount ELSE 0 END), 0) AS LocalHotel,
ISNULL(SUM(CASE ExpenseID WHEN 3 THEN Amount ELSE 0 END), 0) AS Fuel
FROM t_BillInfoDetail
GROUP BY BillID, BillDescription, ExpenseID
) AS BID ON BI.BillID = BID.BillID