2013-06-11 5 views
0

Я наблюдал подобный вопрос T SQL Conditional String Concatenation, но stil не может понять, как это сделать. Я даже не могу понять, с чего начать.Условная конкатенация T-SQL

Мой запрос до сих пор выглядит следующим образом:

SELECT 
    R.ReservationsID 'Job No', 
    C.[Trading Name]'Customer Name', 
    C.[Business Address1] 'Customer Address1', 
    C.[Business Address2]'Customer Address2', 
    C.[Business Town]'Customer Town', 
    C.[Business Postal Code]'Customer Postcode', 
    C.CustomerID' Customer ID', 
    I.InvoiceID' InvoiceID' , 
    'address' AS [Supplier Address 1], --CHANGE 
    'address' AS [Supplier Address 2], --CHANGE 
    'town' AS [town], --CHANGE 
    'post code' AS [Post Code], --CHANGE 
    'Supplier' AS [Supplier], --CHANGE 
    R.Quantity 'Purchase QTY', 
    SM.Instock 'QTY In Stock', 
    SM.StockCode 'Product Code', 
    SM.StockDescription 'Sale Unit', 
    R.[Delivery Date], 
    V.[Registration]'Vehicle Reg', 
    I.[NET] 'Sale Price', 
    I.[GROSS] 'Total Sale Price', 
    R.[Delivery Date] ' Del Date', 
    R.Quantity as qty, --CHANGE 
    SM.StockDescription AS [Purchase Unit], --CHANGE 
    0.0 AS [Purchase total price], --CHANGE 
    0.0 AS [PO No], 
    (D.Forename + ' ' + D.Surname) AS [Driver Name], 
    (convert(varchar(10),dateadd(MM,-7,GETDATE()),103)) AS 'Date -7 Months', 
    0.0 AS [Purchase Invoice], 
    0.0 AS [Purchase Price], 
    RI.StockID 
FROM 
    dbo.tblReservation R 
    LEFT JOIN tblReservationItems RI 
     ON RI.ReservationsID = R.ReservationsID 
      AND (RI.Deleted != 1) AND (R.Completed !=0) 
    LEFT JOIN tblInvoice I ON I.InvoiceID = R.Invoice AND (I.Deleted != 1) 
    LEFT JOIN tblCustomer C ON C.CustomerID = R.CustomerID 
    LEFT JOIN tblStockMaster SM ON SM.StockID = RI.StockID 
    LEFT JOIN dbo.tblvehicle V ON v.VehicleID = R.VehicleID 
    LEFT JOIN dbo.tblDriver D ON D.DriverID = R.DriverID 
WHERE  (I.Deleted = 0) 
    AND (r.completed=1) 
    AND [Delivery Date] >= DATEADD(month, -7, GETDATE()) 
    AND [Delivery Date] IS NOT NULL 

Отчет основан на R.ReservationsID 'Job No' Однако может быть несколько «Продажа Units» и «Приобретение единиц» для каждого «работы нет», так что я являюсь пытаясь сделать, это объединить различные «единицы покупки» и «единицы продажи» в один отдельный столбец, разделенный запятыми, для согласования с «номером задания».

Чтобы смутить это еще больше, я хотел бы также объединить QTY единиц закупки & Продажа единицы в колонку, чтобы она выглядела примерно так.

Желаемая Выход:

New_Concat_Column 

[QTY] + 'x' + [SALE UNIT] + ","[QTY] + 'x' + [SALE UNIT] + "," 

Любые указатели о том, как идти об этом было бы весьма признателен. Было бы хорошо сделать это в чистом SQL, но любые методы в Crystal Reports также приветствуются.

ответ

0

Вы должны использовать CAST или CONVERT изменить числовые данные строки:

Cast(R.Quantity as VarChar(10)) + 'x' + SM.StockDescription + ', ' + 
    Cast(R.Quantity as VarChar(10)) + 'x' + SM.StockDescription + ',' as New_Concat_Column 

Помимо: Часто бывает полезно помечать вопросы базы данных с помощью программного обеспечения и версии базы данных, например, SQL Server 2008R2 и включить соответствующие схемы таблиц. Я предположил, что Sale Unit - это какая-то строка.

+0

Спасибо, это только ответы на небольшую часть вопроса. [Отдел продаж] и [Блок покупок] вытягиваются из разных таблиц. Я создаю представление и пытаюсь выполнить их, как описано выше, с разделением запятой. – Eric213

+0

@AlecHenderson - Я обновил ответ, чтобы использовать имена столбцов с псевдонимом. Мне непонятно, спрашиваете ли вы о ссылках на новые имена столбцов, например. 'Qty', или создавая список произвольной длины с запятой, используя данные из нескольких строк. Или что-то еще. – HABO

Смежные вопросы