Как преобразовать несколько строк в одну строку?
Я хочу преобразовать несколько строк в одну строку
Где все значения столбцов должны отображаться в одном столбце
Только греби.
Что я уже пробовал:
Я попытался использовать отчетливую запись.
WITH CTE AS (SELECT DISTINCT Con.CompanyName AS Contact, CASE WHEN CRel.ContactRelationTypeID= 2 then 'Y' WHEN CRel.ContactRelationTypeID in(3,8) then ' ' END AS IsClient, CASE WHEN CRel.ContactRelationTypeID=3 THEN 'Y' WHEN CRel.ContactRelationTypeID in (2,8) THEN ' ' END AS IsCustomer, CASE WHEN CRel.ContactRelationTypeID =8 THEN 'Y' WHEN CRel.ContactRelationTypeID in(2,3) THEN ' ' END AS IsSupplier FROM contacts con INNER JOIN Countries Cont ON Con.CountryID=Cont.CountryID INNER JOIN ContactRelations CRes ON Con.ContactID=CRes.ContactID INNER JOIN ContactRelationTypes CRel ON CRes.ContactRelationTypeID=CRel.ContactRelationTypeID WHERE CRel.ContactRelationTypeID in(2,8,3) ) SELECT Contact, MAX(IsClient) AS Customer , MAX(IsCustomer) AS Client, MAX(IsSupplier)AS Supplier FROM CTE GROUP BY Contact;
Нет. Этот запрос не дает ответа R8. Я уже пробовал это сделать. Нужен вывод только в одну строку. И все столбцы должны отображаться со своими значениями, как показано в моем выводе
Запрос-это проверка обновлений!
да, это работает.
но моя исходная таблица исходит из базы данных. я задаю свой вопрос, чтобы вы могли понять.
Ваш запрос идеален, но как применить его к нижеприведенному запросу.
Выберите отчетливый Кон.Название как связаться,
'Y' как IsClient,
"Как Искустомер,
"Как IsSupplier
Из контактов кон
Внутренние страны присоединения Продолжение на кон.CountryID=Продолжение.CountryID
Внутреннее соединение ContactRelations Црес на кон идентификатор contactid=Црес.Идентификатор contactid
Внутреннее соединение ContactRelationTypes CRel на CRes.ContactRelationTypeID=CRel.ContactRelationTypeID
Где CRel.ContactRelationTypeID=2 -- 2 клиента
СОЮЗ
Выберите отчетливый Кон.Название как связаться,
- Как и положено.,
'Y' как IsCustomer,
"Как IsSupplier
Из контактов кон
Внутренние страны присоединения Продолжение на кон.CountryID=Продолжение.CountryID
Внутреннее соединение ContactRelations Црес на кон идентификатор contactid=Црес.Идентификатор contactid
Внутреннее соединение ContactRelationTypes CRel на CRes.ContactRelationTypeID=CRel.ContactRelationTypeID
Где CRel.ContactRelationTypeID=3 -- 3 клиент
СОЮЗ
Выберите отчетливый Кон.Название как связаться,
- Как и положено.,
"Как Искустомер,
"Y" как IsSupplier
Из контактов кон
Внутренние страны присоединения Продолжение на кон.CountryID=Продолжение.CountryID
Внутреннее соединение ContactRelations Црес на кон идентификатор contactid=Црес.Идентификатор contactid
Внутреннее соединение ContactRelationTypes CRel на CRes.ContactRelationTypeID=CRel.ContactRelationTypeID
Где CRel.ContactRelationTypeID=8 -- 8 поставщик
как вы можете видеть , столбцы isclient, issupplier, iscustomer не относятся к базе данных. Пожалуйста, постарайтесь понять вышеописанный вопрос. и дайте мне знать, как применить ваш ответ
-- вы можете сделать группировку по направлению по столбцу таблицы
Выберите отчетливый Кон.Название как связаться,
- Как и положено.,
"Как Искустомер,
"Y" как IsSupplier
Из контактов кон
Внутренние страны присоединения Продолжение на кон.CountryID=Продолжение.CountryID
Внутреннее соединение ContactRelations Црес на кон идентификатор contactid=Црес.Идентификатор contactid
Внутреннее соединение ContactRelationTypes CRel на CRes.ContactRelationTypeID=CRel.ContactRelationTypeID
Где CRel.ContactRelationTypeID=8 группа по Кон.Название организации
Я уже пробовал эту "группу по con.companyname". но это не работает.
Я хочу, чтобы отчетливая запись каждого уникального имени и значений столбцов поставщика, клиента и клиента была похожа на вывод, заданный вашим запросом, т. е. решением 1
запрос обновлен проверьте и дайте мне знать!:)
Да. Идеальный
Улучшите свой вопрос в соответствии с обновленным решением, вы должны быть ясны, прежде чем публиковать свой вопрос.Это уже второй раз, когда вы так поступили, не повторяйте еще раз, что вы просто ожидаете идеальных решений, не прилагая никаких усилий.
Это не совсем так. Все, что я прошу здесь, - это фиктивные данные. Я уже пробовал некоторые решения самостоятельно. Когда я не смог найти точный синтаксис, я спрашиваю здесь. На самом деле это небольшая часть большого запроса. Но, как я уже сказал, Я новичок в sql, иногда мне это трудно. Как вы и предполагаете, я изменил свой вопрос.
обновить запрос Союза в разделе "Что я пробовал:"
Для этого вам нужно создать хранимую процедуру, что невозможно сделать с помощью одного запроса
CREATE PROC spGetDistinctResult AS SET NOCOUNT ON; DECLARE @tblResult TABLE (ID INT IDENTITY(1, 1),NAME VARCHAR(10),Customer VARCHAR(10),Client VARCHAR(10),Supplier VARCHAR(10)) DECLARE @tblName TABLE (ID INT IDENTITY(1, 1),NAME VARCHAR(10)) DECLARE @Customer AS VARCHAR(10) DECLARE @Client AS VARCHAR(10) DECLARE @Supplier AS VARCHAR(10) DECLARE @TtlRows AS INT INSERT INTO @tblName(NAME) SELECT distinct Name FROM TABLE1 ORDER BY Name SET @TtlRows=0 While (Select Count(*) From @tblName ) > 0 Begin @TtlRows = @TtlRows + 1 SELECT @Name= Name FROM @tblResult WHERE ID=@TtlRows SET @Customer = "" SET @Client = "" SET @Supplier = "" SELECT @Customer= Customer FROM @tblResult WHERE ID=@TtlRows AND RTRIM(LTRIM(Customer))<>"" SELECT @Client= Client FROM @tblResult WHERE ID=@TtlRows AND RTRIM(LTRIM(Client))<>"" SELECT @Supplier= Supplier FROM @tblResult WHERE ID=@TtlRows AND RTRIM(LTRIM(Supplier))<>"" INSERT INTO @tblResult SELECT @Name,@Customer,@Client,@Supplier End select * from @tblResult
И все же решения 1 и 3 сделали это с помощью одного запроса ... и что еще важнее-без петли! Очень редко возникает ситуация, когда вам действительно нужно использовать цикл на языке, основанном на множествах
Да. Вы-R8. Ваш запрос помогает заранее выровнять уровень. Но я попробую и скоро вернусь к тебе.
Вы пытаетесь решить неправильную проблему. Вы когда-нибудь задумывались, почему в вашем столе так много пустых ячеек? Это верный признак неадекватного дизайна базы данных. Еще раз посмотрите на дизайн базы данных, посмотрите на этот пример:
CREATE TABLE tablename ( field1 varchar(255), field2 varchar(255), PRIMARY KEY (field1, field2) ) INSERT INTO tablename VALUES ('ABC', 'Customer'), ('ABC', 'Client'), ('ABC', 'Supplier'), ('DEF', 'Customer'), ('DEF', 'Client'), ('GHI', 'Client'); SELECT field1, [Customer], [Client], [Supplier] FROM (SELECT field1, field2 FROM tablename) as src PIVOT ( COUNT(field2) FOR field2 IN ([Customer], [Client], [Supplier] ) ) AS outputили в прямом эфире демо на [^]
Очень приятно иметь такой запрос. Я тоже попробую и скоро отвечу вам. Пустые ячейки присутствуют, потому что я поставил синтаксис like (else "). И это было требование отображать пустые ячейки, если (имя) не находится внутри ( клиент, клиент, поставщик). В моей базе данных некоторые имена помещены под эти три отношения, а некоторые имена не находятся ни в каких отношениях. Вот почему некоторые камеры пусты.
Еще одна вещь-pivot используется, когда мы хотим преобразовать строки в столбцы. Это была моя ошибка, что я не упомянул об этом, мои таблицы взяты из базы данных. Я его не создавал. Но теперь я изменил свой вопрос. Но сейчас она не включает в себя таблицы.