1

Тема: SQL Server. Як виключити повторювані значення в стовбичку?

Здорів. Така справа. Є три таблички. В першій id та назва книги, в другій id та ім'я автора, в третій id книги та id автора. У одної книги може бути декілька авторів, наприклад. Необхідно вибрати значення в форматі - Назва книги, Ім'я автора. Але якщо у однієї книги декілька авторів, то щоб назва книги відображалась лише в одній стрічці. Див. Рис 1. Рис 1 в доданих файлах.
p.s. я то вірно пишу - SQL Server, чи може SQL від Microsoft має своє ім'я, транзакт SQL, здається?

Post's attachments

менііі так треебааа.png 7.45 kb, 220 downloads since 2013-09-16 

2

Re: SQL Server. Як виключити повторювані значення в стовбичку?

TRYCUKI_V_KROVI написав:

Здорів. Така справа. Є три таблички. В першій id та назва книги, в другій id та ім'я автора, в третій id книги та id автора. У одної книги може бути декілька авторів, наприклад. Необхідно вибрати значення в форматі - Назва книги, Ім'я автора. Але якщо у однієї книги декілька авторів, то щоб назва книги відображалась лише в одній стрічці.

Це проблема відображення, а не запиту. Запит все одно має щось повернути, причому якщо ви його не сортуєте, то не факт, що ці рядки будуть поруч, що взагалі робить ідею з приховуванням комірок безглуздою. Коли відмальовуєте таблицю, ховайте "зайві" значення - ото й вся наука.

TRYCUKI_V_KROVI написав:

Див. Рис 1. Рис 1 в доданих файлах.

Ніколи не вживайте вираз "див. рис. 1", якщо хочете отримати відповідь.

TRYCUKI_V_KROVI написав:

p.s. я то вірно пишу - SQL Server, чи може SQL від Microsoft має своє ім'я, транзакт SQL, здається?

MS SQL Server. Чи просто MSSQL.

3

Re: SQL Server. Як виключити повторювані значення в стовбичку?

left join

4

Re: SQL Server. Як виключити повторювані значення в стовбичку?

koala написав:
TRYCUKI_V_KROVI написав:

Здорів. Така справа. Є три таблички. В першій id та назва книги, в другій id та ім'я автора, в третій id книги та id автора. У одної книги може бути декілька авторів, наприклад. Необхідно вибрати значення в форматі - Назва книги, Ім'я автора. Але якщо у однієї книги декілька авторів, то щоб назва книги відображалась лише в одній стрічці.

Це проблема відображення, а не запиту. Запит все одно має щось повернути, причому якщо ви його не сортуєте, то не факт, що ці рядки будуть поруч, що взагалі робить ідею з приховуванням комірок безглуздою. Коли відмальовуєте таблицю, ховайте "зайві" значення - ото й вся наука.

TRYCUKI_V_KROVI написав:

Див. Рис 1. Рис 1 в доданих файлах.

Ніколи не вживайте вираз "див. рис. 1", якщо хочете отримати відповідь.

TRYCUKI_V_KROVI написав:

p.s. я то вірно пишу - SQL Server, чи може SQL від Microsoft має своє ім'я, транзакт SQL, здається?

MS SQL Server. Чи просто MSSQL.

а чо не вживати? перший раз таке написав, думав, то модньо. Я-то знаю, що проблему можна вирішити в прозі-інтерфейсі, котра працює з БД, але також це можна реалізувати за допомогою запиту, треба замінити непотрібні значення пустою строкою, мені так один чювак написав, а ще я бачив таке завдання ось тут http://sql-ex.ru/learn_exercises.php?LN=65 натисніть там на "Показать правильный результат" і побачте, як воно відображається, також в умові завдання написано, що повторюванні значення не треба показувати.

5

Re: SQL Server. Як виключити повторювані значення в стовбичку?

miroslav.chandler написав:

left join

не зовсім зрозумів, як примінити той лефт джоін, написав щось таке

SELECT B.name as "Назва книги", A.name as "Ім'я автора" FROM BookAndAuthor as BA left join Book as B on BA.book_id=B.id left join Author as A on BA.author_id=A.id

результат от такий
https://не-дійсний-домен/4sTjP.png

6

Re: SQL Server. Як виключити повторювані значення в стовбичку?

слухайте хлопці. а можна якось отримати доступ до тієї таблиці, котра ще не повна, а в процесі наповнення. Ну типу дивіться як. Наприклад

SELECT name from Book WHERE id<5

Воно ж по частинкам буде додавати стрічки, ну типу спочатку першу стрічку, і в результаті буде таблиця з одною стрічкою, а потім далі додається ще одна стрічка, і так допоки індекс буде <5. Я от думаю, чи можна використати CASE до потрібного значення, в моєму випадку це Book.name, і сказати так - якщо в недотаблиці, в стовбчику "Назва книги" вже є таке значення, котре ми хочемо додати, то замість нього ми додаємо "".

7

Re: SQL Server. Як виключити повторювані значення в стовбичку?

або може зробити змінну, і разом з нормальною вибіркою зробити

SELECT Book.name INTO myVar, а ось тут вже CASE 

  а в CASE перевіряємо, якщо Book.name==myVar то віддаємо пусту стрічку, а якщо ні, то заносимо Book.name в змінну і віддаємо Book.name

8

Re: SQL Server. Як виключити повторювані значення в стовбичку?

@ТС, по порядку:

1. Щодо вашого запиту з лефт-джойном: так і виведе. І ви не зможете зробити подібне до того, як на малюнку (хіба що візьмете курсори/тимчасові таблиці і будете ставити "" замість "книга1" в усіх рядках, крім верхнього).

2. Про "недотаблицю" пост не зрозумів. Ви так чемно найменували тимчасові таблиці?

9 Востаннє редагувалося funivan (16.09.2013 20:46:48)

Re: SQL Server. Як виключити повторювані значення в стовбичку?

Для чого вам такі заморочки? Простіше вибрати всі книги і до кожної з них вивести інформацію. Це робиться за 5 хв максимум. Ви вбили на вирішення проблеми уже пів дня ;)

Реально база слугує для збереження і отримання даних.

Для форматування даних і красивого виводу вона не дуже підходить. Використовуйте одну з мов програмування ))

10

Re: SQL Server. Як виключити повторювані значення в стовбичку?

funivan написав:

Для чого вам такі заморочки? Простіше вибрати всі книги і до кожної з них вивести інформацію. Це робиться за 5 хв максимум. Ви вбили на вирішення проблеми уже пів дня ;)

Реально база слугує для збереження і отримання даних.

Для форматування даних і красивого виводу вона не дуже підходить. Використовуйте одну з мов програмування ))

Лаба же... Ця база вже піднімалася, здс. :)

11

Re: SQL Server. Як виключити повторювані значення в стовбичку?

Bartash написав:

@ТС, по порядку:

1. Щодо вашого запиту з лефт-джойном: так і виведе. І ви не зможете зробити подібне до того, як на малюнку (хіба що візьмете курсори/тимчасові таблиці і будете ставити "" замість "книга1" в усіх рядках, крім верхнього).

2. Про "недотаблицю" пост не зрозумів. Ви так чемно найменували тимчасові таблиці?

таки так

12

Re: SQL Server. Як виключити повторювані значення в стовбичку?

Bartash написав:
funivan написав:

Для чого вам такі заморочки? Простіше вибрати всі книги і до кожної з них вивести інформацію. Це робиться за 5 хв максимум. Ви вбили на вирішення проблеми уже пів дня ;)

Реально база слугує для збереження і отримання даних.

Для форматування даних і красивого виводу вона не дуже підходить. Використовуйте одну з мов програмування ))

Лаба же... Ця база вже піднімалася, здс. :)

не лаба, а курсова. але цього разу я це роблю не тому що це забаганка викладача, а тому що самому цікаво це зробити, і я зроблю, а потім покажу тут код.

13 Востаннє редагувалося koala (17.09.2013 09:52:02)

Re: SQL Server. Як виключити повторювані значення в стовбичку?

TRYCUKI_V_KROVI написав:

слухайте хлопці. а можна якось отримати доступ до тієї таблиці, котра ще не повна, а в процесі наповнення. Ну типу дивіться як. Наприклад

SELECT name from Book WHERE id<5

Воно ж по частинкам буде додавати стрічки, ну типу спочатку першу стрічку, і в результаті буде таблиця з одною стрічкою, а потім далі додається ще одна стрічка, і так допоки індекс буде <5. Я от думаю, чи можна використати CASE до потрібного значення, в моєму випадку це Book.name, і сказати так - якщо в недотаблиці, в стовбчику "Назва книги" вже є таке значення, котре ми хочемо додати, то замість нього ми додаємо "".

SELECT TOP  5 запит ORDER BY стовпчик

вибере 5 горішніх за певною ознакою.

14

Re: SQL Server. Як виключити повторювані значення в стовбичку?

що за горішніх? ай, пофіг. Вже все зроблено

with cte as
(select ROW_NUMBER() over (partition by B.name order by B.name) num, 
 B.name as "Назва книги" , A.name as "Ім'я автора"
from BookAndAuthor as BA 
        join Book as B on BA.book_id=B.id
        join Author as A on BA.author_id=A.id)
SELECT CASE when num>1 then '' else "Назва книги" END "Назва книги", "Ім'я автора" from cte

https://не-дійсний-домен/4tt9N.png

15

Re: SQL Server. Як виключити повторювані значення в стовбичку?

Пане, ви не думали зайнятися лікуванням раку чи створенням надсвітового двигуна? Із вашою наполегливістю...

16

Re: SQL Server. Як виключити повторювані значення в стовбичку?

koala написав:

Пане, ви не думали зайнятися лікуванням раку чи створенням надсвітового двигуна? Із вашою наполегливістю...

Це що, якісь жарти? Я як побачив слово - рак, подумав, шо ви кажете, що типу у меня рак мозку, тому що я щось не так написав хД

17

Re: SQL Server. Як виключити повторювані значення в стовбичку?

TRYCUKI_V_KROVI написав:
koala написав:

Пане, ви не думали зайнятися лікуванням раку чи створенням надсвітового двигуна? Із вашою наполегливістю...

Це що, якісь жарти? Я як побачив слово - рак, подумав, шо ви кажете, що типу у меня рак мозку, тому що я щось не так написав хД

Та ні, з мозком все ок.
Тепер можете реалізувати алгоритм Фібоначчі на цьому.
А коли досягнете - на цьому.

18

Re: SQL Server. Як виключити повторювані значення в стовбичку?

Bartash написав:
TRYCUKI_V_KROVI написав:
koala написав:

Пане, ви не думали зайнятися лікуванням раку чи створенням надсвітового двигуна? Із вашою наполегливістю...

Це що, якісь жарти? Я як побачив слово - рак, подумав, шо ви кажете, що типу у меня рак мозку, тому що я щось не так написав хД

Та ні, з мозком все ок.
Тепер можете реалізувати алгоритм Фібоначчі на цьому.
А коли досягнете - на цьому.

так задачою ж було не просто відобразити табличку так, як треба, найлегшим з шляхів, а зробити то на sql. коду в прогріммі-клієнті було б не менше ніж на SQL.

19

Re: SQL Server. Як виключити повторювані значення в стовбичку?

TRYCUKI_V_KROVI написав:
Bartash написав:
TRYCUKI_V_KROVI написав:

Це що, якісь жарти? Я як побачив слово - рак, подумав, шо ви кажете, що типу у меня рак мозку, тому що я щось не так написав хД

Та ні, з мозком все ок.
Тепер можете реалізувати алгоритм Фібоначчі на цьому.
А коли досягнете - на цьому.

так задачою ж було не просто відобразити табличку так, як треба, найлегшим з шляхів, а зробити то на sql. коду в прогріммі-клієнті було б не менше ніж на SQL.

Звісно, якщо задача - суто показати результат на екран, то й метод мало ролі грає. Але ж дані, як правило, далі на клієнті показуються/ховаються/щосьще. Не думаю, що варіант процедури на сервері з тимча-таблами, курсорами та іншими радощами буде швидшим, ніж парсинг результату безпосередньо клієнтом.