|
|
|
|
|
для: Loki
(31.08.2007 в 15:12)
| | Или вот так сделаете: в данном случае вы на самом деле соединяете N= 3 таблицы, поэтому и количество соединений в условии WHERE( в вашем случаи) равно k = N - 1 = 2
SELECT e.ename, e1.ename, t.sc1,t.sc2
FROM TEST t JOIN emp e ON (e.empno = t.pl1)
LEFT JOIN emp e1 ON (e1.empno = t.pl2);
|
| |
|
|
|
|
|
|
|
для: evilive
(31.08.2007 в 15:00)
| | C JOIN запрос легче читается, так как не приходится его читать сразу с начала и с конца. Кроме того, проще в него включить пустые результаты, если потребуется. | |
|
|
|
|
|
|
|
для: evilive
(30.08.2007 в 16:02)
| | ...хммм.. вот в обеденный перерыв, мой моск сгенерировал следующий скрипт :)
SELECT A.user_nickname, B.user_nickname, gm_score1, gm_score2
FROM tb_games, tb_user as A, tb_user as B
WHERE gm_user1=A.user_id AND gm_user2=B.user_id
|
С его помощью строится точно такая же таблица, только без всех этих сложных конструкций с джойнами :)... следовательно вытекает вопрос: как правильнее технически, как вернее стилистически, как быстрее?? вобщем как бы выполнили эту задачу ВЫ ?? | |
|
|
|
|
|
|
|
для: evilive
(30.08.2007 в 16:02)
| | Отпуск есть отпуск... | |
|
|
|
|
|
|
|
для: evilive
(29.08.2007 в 14:41)
| | эх... после долгих мучений и всяческих шаманств, всетаки пришел к цели... оказывается, видимо, в аксессе просто нет таких операндов или хз почему он их не видит...
вот выкладываю модифицированый вариант, на случай если кто столкнется с проблемой...
SELECT TT.player, SUM(IIf(TT.pr>0,1,0)) AS WINs, SUM(IIF(TT.pr=0,1,0)) AS DRAWs, SUM(IIF(TT.pr<0,1,0)) AS LOSEs
FROM [SELECT gm_user1 as player, SGN(gm_score1-gm_score2) as pr FROM tb_games
UNION ALL
SELECT gm_user2, SGN(gm_score2-gm_score1) FROM tb_games]. AS TT, tb_user
WHERE TT.player = tb_user.user_id
GROUP BY player;
|
еще и функции SIGN оказалось что нет, еле нашел что она называется SGN :) | |
|
|
|
|
|
|
|
для: evilive
(29.08.2007 в 17:43)
| | так, на этот вопрос ответ я нашел :) замутил так:
SELECT PL1,tb_user.user_nickname as PL2,SC1,SC2
FROM [SELECT tb_user.user_nickname as PL1, tb_games.gm_user2 as tempPL2, tb_games.gm_score1 as SC1, tb_games.gm_score2 as SC2
FROM tb_games INNER JOIN tb_user ON tb_games.gm_user1=tb_user.user_id] as TT
INNER JOIN tb_user
ON TT.tempPL2=tb_user.user_id;
|
т.е. получается тот запрос что я писал выше (который дела то что мне надо но только с одной колонкой) влаживаю как подзапрос для запроса который генерит таблицу которая мне надо, но со второй колонкой :)... думаю вроде правильно ...
... теперь нужа помощь с кейсами, у меня в аксессе не хочет запускаться так как написано выше... :(
P.S. хмм... глупо как-то, сам с собой общаюсь :(... неужели никто помочь не в силах ??? или я уже задолбал всех ??? :) | |
|
|
|
|
|
|
|
для: oradev
(22.08.2007 в 23:10)
| | и еще вопрос :)...
вот такой запрос
SELECT gm_user1, gm_user2, gm_score1, gm_score2
FROM tb_games
|
строит такой результат
gm_user1 gm_user2 gm_score1 gm_score2
1 2 3 0
3 4 1 1
1 3 3 2
|
а как теперь вместо айди юзеров подставить туда их ники или имена...
могу сделать только для одной колонки :) а как это промутить для двух не знаю... помогите )... я писал так :
SELECT tb_user.user_nickname, tb_games.gm_score1, tb_games.gm_score2
FROM tb_allgames
INNER JOIN tb_user
ON tb_games.gm_user1 = tb_user.user_id;
|
получается колонка с ником первого игрока, и еще две колонки с забитыми мячами, как сделать чтобы еще и ник соперника можно было вывести ? | |
|
|
|
|
|
|
|
для: oradev
(22.08.2007 в 23:10)
| | в чем может быть беда ?
Ошибка синтаксиса (пропущен оператор) в выражении запроса 'sum(case when pr > 0 then 1 else 0 end) wins'
|
пробовал так:
'sum(case pr when pr > 0 then 1 else 0 end) wins'
|
результат тот же... | |
|
|
|
|
|
|
|
для: oradev
(22.08.2007 в 23:10)
| | большое спасибо, буду пробовать... | |
|
|
|
|
|
|
|
для: oradev
(22.08.2007 в 13:31)
| | Если необходимо узнать кол-во побед, поражений и ничьих для всех команд, то можно применить следующий запрос:
SQL> select player,
2 sum(case when pr > 0 then 1 else 0 end) wins,
3 sum(case when pr = 0 then 1 else 0 end) draws,
4 sum(case when pr < 0 then 1 else 0 end) loses
5 from
6 (
7 select pl1 player, sign(sc1-sc2) pr from tb_games
8 union all
9 select pl2, sign(sc2-sc1) pr from tb_games
10 )
11 group by player;
PLAYER WINS DRAWS LOSES
---------- ---------- ---------- ----------
1 1 1 3
2 2 1 0
3 2 0 2
|
| |
|
|
|
|