ЦЕНТР в sql 2005

Вы должны включить CORS. В зависимости от приложения, есть разные способы сделать это, я обычно делаю это на сервере.

Подробнее здесь: https://enable-cors.org/

8
задан IZar 13 October 2008 в 19:46
поделиться

5 ответов

Используя ROW_NUMBER(), PIVOT и некоторый динамический SQL (но никакой необходимый курсор):

CREATE TABLE [dbo].[stackoverflow_198716](
    [code] [varchar](1) NOT NULL,
    [number] [int] NOT NULL
) ON [PRIMARY]

DECLARE @sql AS varchar(max)
DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique
DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique

SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + ']'
        ,@select_list = COALESCE(@select_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + '] AS [col_' + CONVERT(varchar, PIVOT_CODE) + ']'
FROM (
    SELECT DISTINCT PIVOT_CODE
    FROM (
        SELECT code, number, ROW_NUMBER() OVER (PARTITION BY code ORDER BY number) AS PIVOT_CODE
        FROM stackoverflow_198716
    ) AS rows
) AS PIVOT_CODES

SET @sql = '
;WITH p AS (
    SELECT code, number, ROW_NUMBER() OVER (PARTITION BY code ORDER BY number) AS PIVOT_CODE
    FROM stackoverflow_198716
)
SELECT code, ' + @select_list + '
FROM p
PIVOT (
    MIN(number)
    FOR PIVOT_CODE IN (
        ' + @pivot_list + '
    )
) AS pvt
'

PRINT @sql

EXEC (@sql)
13
ответ дан 5 December 2019 в 10:45
поделиться

Просто, потому что я хотел получить еще некоторый опыт с CTEs, я придумал следующее:

WITH CTE(CTEstring, CTEids, CTElast_id)
AS
(
    SELECT string, CAST(id AS VARCHAR(1000)), id
    FROM dbo.Test_Pivot TP1
    WHERE NOT EXISTS (SELECT * FROM dbo.Test_Pivot TP2 WHERE TP2.string = TP1.string AND TP2.id < TP1.id)
    UNION ALL
    SELECT CTEstring, CAST(CTEids + ' ' + CAST(TP.id AS VARCHAR) AS VARCHAR(1000)), TP.id
    FROM dbo.Test_Pivot TP
    INNER JOIN CTE ON
        CTE.CTEstring = TP.string
    WHERE
        TP.id > CTE.CTElast_id AND
        NOT EXISTS (SELECT * FROM dbo.Test_Pivot WHERE string = CTE.CTEstring AND id > CTE.CTElast_id AND id < TP.id)
)
SELECT
    t1.CTEstring, t1.CTEids
FROM CTE t1
INNER JOIN (SELECT CTEstring, MAX(LEN(CTEids)) AS max_len_ids FROM CTE GROUP BY CTEstring) SQ ON SQ.CTEstring = t1.CTEstring AND SQ.max_len_ids = LEN(t1.CTEids)
ORDER BY CTEstring
GO

Возможно, требовалась бы некоторую тонкую настройку, но это работало с Вашим примером

1
ответ дан 5 December 2019 в 10:45
поделиться

Объединить функция могла также использоваться здесь, подобная другим вопросам, которые спросили о конкатенирующих данных.

Как создать функцию SQL Server для "присоединений" к нескольким строкам от подзапроса в единственное разграниченное поле?

1
ответ дан 5 December 2019 в 10:45
поделиться

Этот связанный вопрос должен иметь ответ, в котором Вы нуждаетесь: SQL Server: Примеры ВЕРТЯЩИХСЯ Строковых данных

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

1
ответ дан 5 December 2019 в 10:45
поделиться

Я не уверен, что то, что Вы делаете, действительно возможно (или по крайней мере практично) в SQL - я не уверен, потому что я все еще не абсолютно уверен, что Вы хотите сделать.

Вы могли создать ту сводную таблицу в своем клиентском приложении, например, с:

select distinct Letter from MyTable

получить список букв и затем использовать параметризированный запрос в цикле:

select Number from MyTable where Letter=:letter

получить список чисел для каждой буквы.

0
ответ дан 5 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: