Если вы используете SQL Server 2005+, вы можете использовать функцию PIVOT
для преобразования данных из строк в столбцы.
Похоже, вам понадобится использовать динамический sql, если недели неизвестны, но вначале легче видеть правильный код с использованием жестко кодированной версии.
Сначала рассмотрим некоторые быстрые определения таблиц и данные для использования:
CREATE TABLE #yt
(
[Store] int,
[Week] int,
[xCount] int
);
INSERT INTO #yt
(
[Store],
[Week], [xCount]
)
VALUES
(102, 1, 96),
(101, 1, 138),
(105, 1, 37),
(109, 1, 59),
(101, 2, 282),
(102, 2, 212),
(105, 2, 78),
(109, 2, 97),
(105, 3, 60),
(102, 3, 123),
(101, 3, 220),
(109, 3, 87);
Если ваши значения известны, тогда вы будете жестко запрограммировать запрос:
select *
from
(
select store, week, xCount
from yt
) src
pivot
(
sum(xcount)
for week in ([1], [2], [3])
) piv;
См. SQL Demo
Затем, если вам нужно сгенерировать неделю номер динамически, ваш код будет:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Week)
from yt
group by Week
order by Week
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT store,' + @cols + ' from
(
select store, week, xCount
from yt
) x
pivot
(
sum(xCount)
for week in (' + @cols + ')
) p '
execute(@query);
См. SQL Demo .
Динамическая версия генерирует список номеров week
, которые должны преобразуется в столбцы. Оба дают тот же результат:
| STORE | 1 | 2 | 3 |
---------------------------
| 101 | 138 | 282 | 220 |
| 102 | 96 | 212 | 123 |
| 105 | 37 | 78 | 60 |
| 109 | 59 | 97 | 87 |
Вы можете сделать это, например, с тегом {% if ... %}
:
{% for player in players %}
<tr>
<td>
<input type="checkbox" name="player_check"{% if player.player_check %} checked{% endif %}>
</td>
</tr>
{% endfor %}
Но я думаю, что вам лучше использовать формы Django, которые будут обрабатывать это более элегантным способом для вас: вы указываете поле формы, а Django будет обрабатывать остальные.
<input>
, это будет означать, что вам нужно указать их дважды (и, возможно, даже больше). – Willem Van Onsem 13 July 2018 в 10:52