SQL Server 2005, превратите столбцы в строки

Вы не можете перейти к Observable. Вы должны подписаться на него, чтобы восстановить массив из TodoService. Попробуйте что-то вроде этого:

public $todos :TodoService[];

// ..

public getGlobalData() {
    this.getToDoData().subscribe(result => this.$todos = result);
}

Или вы можете напрямую преобразовать Observable в массив, используя async в вашем HTML:

<app-editform [toDo$]="todo" *ngFor="let todo of (cs.$todos | async)"></app-editform>
7
задан casperOne 31 October 2011 в 20:41
поделиться

4 ответа

Этот ответ является действительно frantisek's, я просто копирую здесь для исправления ошибки (я не могу отредактировать непосредственно).

В основном Вы используете то решение с тонкой настройкой:

SELECT 
    max(DE) as DE, max(EN) as EN 
FROM 
    test 
PIVOT (MAX([text]) FOR ISO in (DE,EN)) p

Это получит содержание в одну строку. Кроме того, это отбрасывает идентификатор, так как это не имеет смысла, если Вы хотите одну строку (нет никакой логики для указания, что сделать с ним при объединении в одну строку).

Кроме того, предположение сделано этим, значения в столбце ISO уникальны, иначе, это потеряет данные из-за MAX агрегат.

5
ответ дан 7 December 2019 в 01:28
поделиться

Я нашел решение как следующее:

SELECT 
    ID, DE, EN
FROM 
    TextTable 
PIVOT(MAX([text]) FOR ISO IN (DE,EN)) p

Возможно использовать ЦЕНТР с МАКСОМ, агрегировавшим функцию по тексту.

2
ответ дан 7 December 2019 в 01:28
поделиться

Так как Вы явно попросили решение нецентра: это должно работать, если Вы знаете, какой ISOs Вы будете иметь в строках. Я назвал таблицу "Test".

declare @temp table ([ID] int, [de] varchar(255), [en] varchar(255)) -- add ISOs if necessary

INSERT @temp 
SELECT distinct [ID], '', '' from Test -- ADD '' for other ISOs if necessary

DECLARE c CURSOR read_only 
FOR SELECT [ID], [ISO], [Text] from test

DECLARE  @ID int, @ISO char(2), @Text varchar(255)
OPEN c

FETCH NEXT FROM c INTO @ID, @ISO, @Text
WHILE (@@fetch_status <> -1)
BEGIN
    IF (@@fetch_status <> -2)
    BEGIN
        UPDATE  @temp
        SET     [DE] = case when @ISO = 'DE' then @Text else [de] end,
            [EN] = case when @ISO = 'EN' then @Text else [en] end
                    -- add ISOs if necessary
        WHERE   [ID] = @ID
    END
    FETCH NEXT FROM c INTO @ID, @ISO, @Text
END

CLOSE c
DEALLOCATE c

SELECT * FROM @temp
0
ответ дан 7 December 2019 в 01:28
поделиться

Запрос без ЦЕНТРА даже при том, что другие ответы доказывают Вас, может использовать ЦЕНТР :)

SELECT
    MAX(DE.Text) AS DE,
    MAX(EN.Text) AS EN  
FROM TextTable AS TT
LEFT JOIN TextTable AS DE
    ON DE.ID = TT.ID
    AND DE.ISO = 'DE'
LEFT JOIN TextTable AS EN
    ON EN.ID = TT.ID
    AND EN.ISO = 'EN'
1
ответ дан 7 December 2019 в 01:28
поделиться
Другие вопросы по тегам:

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