katumbamartin Ответов: 1

Удаление пустых строк из таблицы SQL


Привет всем, у меня есть datatable (Table1) с тремя столбцами: id, Developments и Crops.

Мне нужно написать sql-запрос, который может изменить мою таблицу 1, чтобы она выглядела как в таблице 2.
Спасибо

Таблица1
--------------------------------
id    | Developments	| Crops
-------------------------------
0001	House	
0001	Farm	
0001		          Mangoes
0001		          Orange
0001		          Neem Tree
0001		          Pineapple


Таблица2
--------------------------------
id    | Developments	| Crops
---------------------------------
0001	House	        Mangoes
0001	Farm	        Orange
0001		            Neem Tree
0001		            Pineapple


Что я уже пробовал:

Я попытался использовать слияние таблиц данных бок о бок.
Сначала я создаю datatable, содержащий все разработки, а затем еще один datatable, содержащий все культуры.

Затем я объединяю две таблицы данных. Проблема заключается в том, что строка в столбце crops не содержит ссылки на столбец id

Maciej Los

Итак, каково же точное содержание таблиц 1 и 2? Если Таблица 2 не содержит информации об идентификаторе, то слияние данных невозможно...

1 Ответов

Рейтинг:
2

David_Wimbley

Чтобы получить желаемые результаты, вам нужно будет изменить свою схему. Вы говорите,что у вас есть 1 Таблица под названием Развитие и 1 Таблица под названием посевы. Ваши разработки имеют отношение "один ко многим" к культурам, а ваши культуры имеют отношение "многие к одному" к разработкам. Для меня и для того, как я понимаю этот вопрос, ваша схема не имеет большого смысла. Не стесняйтесь уточнять, если я неправильно вас понял.

Я собираюсь сделать предположение, что, поскольку строки ниже фермы в таблице 2 пусты, они должны содержать ферму.

Этот код должен выполняться в sql server.

DECLARE @Developments TABLE 
(
	Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
	Developments VARCHAR(200) NULL
)

DECLARE @Crops TABLE 
(
	Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
	DevelopmentId INT NOT NULL,
	Crop VARCHAR(200) NULL
)

INSERT INTO @Developments (Developments ) VALUES ('House')
INSERT INTO @Developments (Developments ) VALUES ('Farm')

INSERT INTO @Crops (DevelopmentId, Crop) VALUES (1, 'Mangoes')
INSERT INTO @Crops (DevelopmentId, Crop) VALUES (2, 'Orange')
INSERT INTO @Crops (DevelopmentId, Crop) VALUES (2, 'Neem Tree')
INSERT INTO @Crops (DevelopmentId, Crop) VALUES (2, 'Pineapple')


SELECT 
	A.Developments, B.Crop
FROM @Developments AS A 
JOIN @Crops AS B ON B.DevelopmentId = A.Id


Выход

Развитие Культуры
Домашние Манго
Ферма Оранжевый
Ферма Цедратом
Ананасовую Ферму


katumbamartin

Привет Дэвид,
Спасибо за ответ.
Я хотел бы сделать свой вопрос более ясным.

На самом деле у меня есть только одна таблица; это Таблица 1. Таблица 2 должна исходить из оператора sql select, который я сейчас ищу.

Когда вы смотрите на столбцы для разработки, там только две записи находятся в стадии разработки, поэтому мне нужно иметь запрос, который может вытащить все записи в Столбцах культур, чтобы я мог избавиться от пустых ячеек строк, появляющихся над "манго". Мой желаемый результат должен быть таким, как в таблице 2

David_Wimbley

С данной структурой таблицы, Как вы должны знать, что дом связан с манго в столбце культур, но не связан с апельсиновым урожаем. Или что ферма связана с Оранж, но больше ни с чем?

Ваш пример таблицы 2, кажется, показывает связь в ваших данных, но, имея все ваши данные в одной таблице, там нет никакой связи, чтобы указать, какое развитие связано с какой культурой.

Похоже, что самая большая проблема здесь заключается в том, что у вас есть проблема нормализации вашей схемы...пустые строки являются результатом этой проблемы.