• В чем разница между LINQ to SQL и Entity Framework и когда, что лучше использовать?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Когда-то потратил очень много времени на поиск того что же лучше и чем они вообще отличаются.
    Поищите в интернете, там всё по полочкам разложено.
    Но если коротко: Используйте Entity Framework. LINQ to SQL уже давно устарел и проект фактически закрыт. EF же развивается, хоть и с черепашей скоростью
    Ответ написан
    Комментировать
  • Как оптимизировать данный SQL код?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    SELECT orders.delivery,SUM(orders.delivery) as SUMM
    FROM orders
    JOIN baskets ON orders.basket_id=baskets.id
    WHERE baskets.purchase_status = 3 AND orders.deleted_at IS NULL
    AND DATE(orders.created_at) >= :start AND DATE(orders.created_at) <= :finish

    GROUP BY orders.delivery
    Ответ написан
  • Поочередно подставить значения в SQL запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Сформируйте временную таблицу где будут два поля: 1е - первое значение type, 2e - второе значение.
    Допустим это будет таблица tmp_type с полями type1 и type2
    Затем пишем такой запрос:
    SELECT  tmp_type.type1,tmp_type.type2,sum(money) FROM `accounts` 
    inner join tmp_type ON tmp_type.type1 =accounts.type or tmp_type.type2 =accounts.type
    group by tmp_type.type1,tmp_type.type2
    WHERE date >= (CURDATE()-1) AND date < CURDATE()
    Ответ написан
    Комментировать
  • Почему не записывается кириллица в поле типа text MS-SQL?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Наверное не хватает ковычек.
    INSERT INTO [Orders] [Address]) VALUES ('0xc8ecff20d4e0ece8ebe8ff20cef2f7e5f1f2e2ee')

    Но я бы на вашем месте не использовал тип TEXT - в новых версиях от него откажутся. Используйте nvarchar(max)
    Ответ написан
    Комментировать
  • С чего начать систему учёта склада?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Я на своей практике (а работаю я именно с системами учета) из нормальных могу порекомендовать такую структуру:
    1) таблица Приходов Income (заголовок, где указанны дата прихода, подразделение куда пришел и прочее) + IncomeGoods - (тело заголовка, где указан товар, количество и цена)
    2) Таблица Расходов Outgo(заголовок, где указанны дата расхода, подразделение от куда ушел) + OutgoGoods - (тело заголовка, где указан товар, количество и цена)
    3) таблица взаимосвязей - RelationIO (идентификаторы приходной позиции товара из IncomeGoods и OutgoGoods )-> таблица взаимосвязей приходов и расходов.
    В чем суть таблицы: у вас есть приход допустим 20 штук. Вам нужно забрать из него 10 штук. Вы записываете в RelationIO то количество которое вы забрали из прихода и что его забрало.
    Только понадобится написать процедуру проведения накладной - под проведением я подразумеваю набор свободных остатков для расхода.
    Теперь по отдельным пунктам.
    • Проводить документ только в транзакции. Никакие вычитания в данной системе не нужны. Все операции обратимы. Вы можете убрать взаимосвязи и удалить расход
    • при каждом обращении рассчитывать предыдущее состояние склада, вычитать из него 3-4 тысячи заказов и прибавлять 3-4 сотни поставок – не решение

      Для проведения это единственное правильное решение. Иначе готовьтесь к большой Ж... в приходах и расходах, когда вся ваша система разрастется.
    • Создайте в заголовках места хранения "Основное" и "Брак" + прочие
    • По последнему писать не буду. Много там слишком. Если такая система заинтересует, могу примерную структуру таблиц прислать с алгоритмом (или кодом на MS SQL) для проведения

    Ответ написан
    7 комментариев
  • Как сделать группировку по двум полям и из них выбрать максимальную группу?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Можно используя RANK.
    SELECT 
    id_new,
    id_user
    FROM (
    SELECT 
         id_new,
        id_user, 
       RANK() OVER (PARTITION BY id_user ORDER by id_new DESK ) AS RNK
    FROM tbl_bookmarks
    GROUP BY id_user,id_new 
    ) X WHERE RNK=1

    А вообще самый правильный вариант еще проще. Вы же делаете группировку. Что мешает сделать так:
    SELECT MAX(id_new),id_user
    FROM tbl_bookmarks
    GROUP BY id_user
    Ответ написан
  • Значение за пределами окна datagrid?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    По хорошему вам нужно изменить подход и работать с источником данных (о котором написал С Sharp ).
    DataGrid это всего лишь отображение и использовать его как DataGridView из WinForms не стоит.
    Создайте класс. Потом создайте ObserbvaleCollection из элементов этого класса.
    Свойству itemssource присвойте созданную коллекцию. Наслаждайтесь и
    спокойно пишите. Руки у вас будут развязаны. А на поиск подобных решений уйдет гора времени потраченных в итоге впустую.
    Ответ написан
    1 комментарий
  • Как убрать повторы из выдачи?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Добавляете в основной запрос
    RANK() over(partition by table2.id order by table1.id)  as RNK

    а потом из выдачи выбираете только те, у которых RNK=1
    select * from 
    (
    SELECT *,  RANK() over(partition by table2.id order by table1.id)  as RNK
     FROM `table1` INNER JOIN `table2` WHERE `table1`.`date`=CURDATE()
    ) X  where X.rnk=1
    Ответ написан
  • C# как сравнить два списка List?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Сравниваете два листа используя LINQ JOIN и выводите результат
    Ответ написан
    Комментировать
  • Как создать элементы ComboBox из SQLite?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Сначала получите из базы в таблицу или в коллекцию результат вашего запроса. Причем, желательно не только имена, а идентификаторы тоже SELECT ID,NameGroup FROM Groupt
    Потом в свойстве DataSource укажите то куда вы данные засунули. В поле DisplayMember укажите NameGroup, а в ValueMember укажите ID.
    Таким образом когда пользователь выберет Имя группы, вы сможете считать ее идентификатор.
    Это для WinForms. Для WPF немного иначе.
    P.S. писал по памяти, мог где-нибудь ошибиться
    Ответ написан
    Комментировать
  • Какой индекс выбрать ASC или DESC?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Я не очень пойму чего вы ходите добиться.
    ASC и DESC всего лишь направления для сортировки.

    SELECT TOP 50 * FROM table ORDER BY id DESC - даст вам 50 последних записей
    SELECT TOP 50 * FROM table ORDER BY id ASC - даст вам 50 первых записей.

    Поясните, может это я еще дзен не постиг?
    Ответ написан
    1 комментарий
  • Где ошибка в назначении переменных в хранимой процедуре sql?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Вы неправильно написали получение значения переменной. Обратите внимание на скобки
    SET @par1 = (  select [поле] from [таблица1] WHERE ....  )

    ну или можно написать
    select @par1 =[поле] from [таблица1] WHERE .... ;
    Ответ написан
  • MS Acccess, SQL не могу изменить тип данных, детали в описании?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    По моему проще создать дополнительное поле типа числовое или денежное. Перенести данные из старого поля с конвертацией. Старое поле удалить, новое переименовать в старое.
    Если не знаете как написать запрос:
    UPDATE таблица
    SET <Новое поле> = CAST(<старое поле> as <тип данных>
    Ответ написан
  • Почему не работает следующий Prepared запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Вы пытаетесь в качестве параметра передать таблицу. По моей практике это не очень возможно.
    Я в таком случае в транзации формирую времянку на сервере, передаю ее в нее таблицу и дальше делаю требуемые операции.
    Но сейчас смотря на ваш код я не очень понимаю зачем передавать таблицу на сервер что бы сервером из нее сделать SELECT.
    Может проще LINQ использовать?
    Ответ написан
  • Как правильно составить запрос-исключение SQL?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Join таблицы саму на себя. Дальше отбор по условию.
    Проверил. Работает.
    create table #table ( id int, parrentid int)
    insert into #table (id, parrentid)
    values
    (1 , 1),
    (2 , 2),
    (3 , 2),
    (4 , 3),
    (5 , 3),
    (6 , 4),
    (7 , 5),
    (8 , 1),
    (9 , 1 )
    
    select * from #TABLE  T 
    left join  #TABLE  T2 ON T.ID=T2.parrentid
    where T2.id is null
    Ответ написан
    Комментировать
  • Как учитывать товар в WMS?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Приходы и расходы считаем накладными. Накладная состоит из 2 таблиц как минимум: таблица заголовков (номер, дата, дата оприходования и проч) и таблица тушек (товар, кол-во, цена и прочее по вкусу).
    Отдельные таблицы на приходы, отдельные на расходы.
    Плюс одна таблица (Relation)на списание товаров из приходов.

    Далее при необходимости набрать товар на расход (продажа, перемещение, списание и прочее) смотрим наши приходы, за вычетом записей из Relation.
    Сам алгоритм можно и в сети найти, находил как-то... Но могу свой скинуть, если вдруг решитесь разобраться в чужом коде (MS SQL).
    Вот тут примерный образец того как у нас это выглядит. Часть таблиц как Товары, Подразделения я не указал.
    391f85d2dbe6443fa3c6896f5d1d6952.png
    Ответ написан
    6 комментариев
  • Как правильно составить SQL запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    У вас немного неправильная логика построения запроса. Сначала сгруппируйте таблицы Order_position и Order_other по GROUP BY Order_id. А потом соединяйте их с заказом.
    Добавил код:
    SELECT O.ID
    	,O.Customer
    	,x.Summ
    	,y.summ
    FROM ORDER O
    LEFT JOIN (
    	SELECT order_id
    		,SUM(Price * Value) AS summ
    	FROM Order_other
    	GROUP BY order_id
    	) x ON O.Id = x.Order_id
    LEFT JOIN (
    	SELECT order_id
    		,SUM(Weight) AS summ
    	FROM Order_position
    	GROUP BY order_id
    	) y ON O.Id = y.Order_id
    Ответ написан
    7 комментариев
  • Kак добавить заполняющееся поле в готовую таблицу sql?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    alter table marki add id int not null identity(1,1) primary key
    Ответ написан
    1 комментарий
  • Как выбрать самые часто упоминаемые тэги из базы данных с помощью SQL?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    select 
    top 100
    tags,
    COUNTposts  
    from 
    (
    select  tags, COUNT( posts ) as COUNTposts 
    from  Posts_Tags
    where  (указываешь диапазон времени)
    group by tags
    ) x
    order by COUNTposts


    Либо убираешь top 100 и пишешь условие для выборки.
    Можно конечно через HAVING еще упростить. Но не знаю есть ли он на MySQL и Postgresql...
    Ответ написан
    Комментировать
  • Как составить SQL запрос?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Написал вам тестовый кусок с использованием RANK для ваших целей
    CREATE TABLE #products (
    id int,
    name nvarchar(255),
    price money
    )
    insert into #products
    (
    id,
    name,
    price
    )
    values
    (0,'пиво',100),(1,'водка',200),(2,'пиво',150),(3,'пиво',100),(4,'спирт',1000)
    
    
    SELECT 
    	id,
    	name,
    	price
    FROM (
    SELECT id
    	,NAME
    	,price
    	,RANK() OVER (PARTITION BY NAME ORDER BY ID DESC) RNK
    FROM #products ) X
    where X.RNK=1
    Ответ написан
    Комментировать