HarshadaBS Ответов: 3

Как преобразовать несколько строк в одну строку?


Я хочу преобразовать несколько строк в одну строку
Где все значения столбцов должны отображаться в одном столбце
Только греби.

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

Я попытался использовать отчетливую запись.

3 Ответов

Рейтинг:
0

Santosh kumar Pithani

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;


HarshadaBS

Нет. Этот запрос не дает ответа R8. Я уже пробовал это сделать. Нужен вывод только в одну строку. И все столбцы должны отображаться со своими значениями, как показано в моем выводе

Santosh kumar Pithani

Запрос-это проверка обновлений!

HarshadaBS

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

Выберите отчетливый Кон.Название как связаться,
'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 поставщик

HarshadaBS

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

Santosh kumar Pithani

-- вы можете сделать группировку по направлению по столбцу таблицы
Выберите отчетливый Кон.Название как связаться,
- Как и положено.,
"Как Искустомер,
"Y" как IsSupplier

Из контактов кон
Внутренние страны присоединения Продолжение на кон.CountryID=Продолжение.CountryID
Внутреннее соединение ContactRelations Црес на кон идентификатор contactid=Црес.Идентификатор contactid
Внутреннее соединение ContactRelationTypes CRel на CRes.ContactRelationTypeID=CRel.ContactRelationTypeID
Где CRel.ContactRelationTypeID=8 группа по Кон.Название организации

HarshadaBS

Я уже пробовал эту "группу по con.companyname". но это не работает.

HarshadaBS

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

Santosh kumar Pithani

запрос обновлен проверьте и дайте мне знать!:)

HarshadaBS

Да. Идеальный

Santosh kumar Pithani

Улучшите свой вопрос в соответствии с обновленным решением, вы должны быть ясны, прежде чем публиковать свой вопрос.Это уже второй раз, когда вы так поступили, не повторяйте еще раз, что вы просто ожидаете идеальных решений, не прилагая никаких усилий.

HarshadaBS

Это не совсем так. Все, что я прошу здесь, - это фиктивные данные. Я уже пробовал некоторые решения самостоятельно. Когда я не смог найти точный синтаксис, я спрашиваю здесь. На самом деле это небольшая часть большого запроса. Но, как я уже сказал, Я новичок в sql, иногда мне это трудно. Как вы и предполагаете, я изменил свой вопрос.

Santosh kumar Pithani

обновить запрос Союза в разделе "Что я пробовал:"

Рейтинг:
0

RDBurmon

Для этого вам нужно создать хранимую процедуру, что невозможно сделать с помощью одного запроса

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


CHill60

И все же решения 1 и 3 сделали это с помощью одного запроса ... и что еще важнее-без петли! Очень редко возникает ситуация, когда вам действительно нужно использовать цикл на языке, основанном на множествах

HarshadaBS

Да. Вы-R8. Ваш запрос помогает заранее выровнять уровень. Но я попробую и скоро вернусь к тебе.

Рейтинг:
0

Peter Leow

Вы пытаетесь решить неправильную проблему. Вы когда-нибудь задумывались, почему в вашем столе так много пустых ячеек? Это верный признак неадекватного дизайна базы данных. Еще раз посмотрите на дизайн базы данных, посмотрите на этот пример:

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
или в прямом эфире демо на [^]


HarshadaBS

Очень приятно иметь такой запрос. Я тоже попробую и скоро отвечу вам. Пустые ячейки присутствуют, потому что я поставил синтаксис like (else "). И это было требование отображать пустые ячейки, если (имя) не находится внутри ( клиент, клиент, поставщик). В моей базе данных некоторые имена помещены под эти три отношения, а некоторые имена не находятся ни в каких отношениях. Вот почему некоторые камеры пусты.

HarshadaBS

Еще одна вещь-pivot используется, когда мы хотим преобразовать строки в столбцы. Это была моя ошибка, что я не упомянул об этом, мои таблицы взяты из базы данных. Я его не создавал. Но теперь я изменил свой вопрос. Но сейчас она не включает в себя таблицы.