Как заполнить флажок: C # против T-SQL - PullRequest
1 голос
/ 30 ноября 2011

Извините за вопрос R101.

У меня есть таблица SQL Server 2008 со списком элементов (itemID, Title). У меня есть еще одна таблица с ящиками (boxID, название). Затем у меня есть таблица поиска, которая определяет, какие элементы входят в какие ящики.

Каков наилучший способ перечисления всех элементов с установленным флажком, чтобы показать, какие элементы находятся в блоке в зависимости от выбранного идентификатора boxID?

Вероятно, оператор T-SQL был бы лучше, чем извилистые данные на C #. У меня было несколько попыток, но я не могу получить правильный результат.

РЕДАКТИРОВАТЬ : Извините, я не очень ясно. Мне нужно представить список всех элементов с флажком рядом с каждым элементом. Я хочу, чтобы checkbox.checked против любого элемента, у которого boxID имеет эквивалентный идентификатор элемента рядом с ним в таблице поиска.

Результат должен иметь в идеале itemID, itemName и логический столбец, чтобы показать, стоит ли устанавливать флажок или нет.

Идея заключается в том, что при обновлении «ящика» элементы могут быть изменены и т. Д.

Ответы [ 3 ]

1 голос
/ 30 ноября 2011

Полагаю, вам нужны две вещи:

1) Список всех предметов

2) Список всех предметов в коробках

Вы можете сделать это впара способов (я предполагаю структуру ваших таблиц здесь - я предполагаю, что ItemBox - это таблица ссылок)

a) Выберите все элементы, затем выберите список всех элементов в полях.:

SELECT I.ItemID,
       I.Title,
       B.BoxId,
       B.Title

FROM   Item I
INNER JOIN ItemBox IB ON (I.ItemID = IB.ItemID)
INNER JOIN Box B ON (IB.BoxID = B.BoxID)

ORDER BY B.Title, I.Title   

Должен дать вам все элементы и их коробки.

Затем вы можете отобразить список всех элементов в форме и список идентификаторов ящиков (просто выберитеиз каждой таблицы).

Если вы кешируете результаты вышеупомянутого запроса (например, словарь, словарь BoxItem), то вы можете просто найти элемент на основе выбранного блока.

б) вы можете запускать запрос каждый раз, когда выбрано поле:

SELECT I.ItemID,
       I.Title,
       B.BoxId,
       B.Title

FROM   Item I
INNER JOIN ItemBox IB ON (I.ItemID = IB.ItemID)
INNER JOIN Box B ON (IB.BoxID = B.BoxID)

WHERE B.Id = @selected_boxid

ORDER BY B.Title, I.Title   

и обновлять соответственно.

Вам нужны примеры для выполнения запроса, привязки к различным элементам управления и т. д.?

Вот версия, которая должна делать то, что вы хотите, основываясь на вашем комментарии:

SELECT I.ItemID,
      I.Title,
        CASE 
           WHEN IB.ItemID IS NULL THEN 0
           ELSE 1
         END AS ItemIsInBox


FROM   Item I
LEFT OUTER JOIN ItemBox IB ON (I.ItemID = IB.ItemID);
1 голос
/ 02 декабря 2011

Вот как я исправил дубликаты:

SELECT DISTINCT TOP (100) PERCENT I.itemID, I.Title, CASE WHEN IB.BoxID = @boxID THEN 1 ELSE 0 END AS ItemIsInBox 
FROM Item AS I 
LEFT OUTER JOIN ItemBox AS IB ON I.itemID = IB.itemID AND **IB.BoxID = @boxID**
ORDER BY I.itemID

Думал, что стоит поделиться. Спасибо за вашу помощь. Вы все помогли мне попасть сюда.

0 голосов
/ 30 ноября 2011

Было бы лучше иметь идентификатор связующего блока 2-й таблицы с идентификатором элемента, иначе вам необходимо убедиться, что в обеих таблицах заголовок уникален.

На ваш вопрос, рискну:

SELECT ItemId, Title FROM Table1 WHERE Title IN (SELECT Title FROM Table2 WHERE BoxId = @boxId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...