Динамический SQL PIVOT:
create table temp
(
date datetime,
category varchar(3),
amount money
)
insert into temp values ('1/1/2012', 'ABC', 1000.00)
insert into temp values ('2/1/2012', 'DEF', 500.00)
insert into temp values ('2/1/2012', 'GHI', 800.00)
insert into temp values ('2/10/2012', 'DEF', 700.00)
insert into temp values ('3/1/2012', 'ABC', 1100.00)
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category)
FROM temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT date, ' + @cols + ' from
(
select date
, amount
, category
from temp
) x
pivot
(
max(amount)
for category in (' + @cols + ')
) p '
execute(@query)
drop table temp
Результаты:
Date ABC DEF GHI
2012-01-01 00:00:00.000 1000.00 NULL NULL
2012-02-01 00:00:00.000 NULL 500.00 800.00
2012-02-10 00:00:00.000 NULL 700.00 NULL
2012-03-01 00:00:00.000 1100.00 NULL NULL
Вам нужно называть Items.Add
один раз для каждой кнопки:
rgpOptions.Items.Add('Screws 12mm');
rgpOptions.Items.Add('Canned Peaches 250g');
// etc.
Или если у вас есть элементы в списке строк уже, с одной строкой текста на кнопку, вы можете написать:
rgpOptions.Items.Assign(OptionsStringList);
Если вы собираетесь использовать что-то более новое, чем Delphi 7, вы ищете метод AddStrings(TArray<String>)
из TStringList.Items
, который позволяет добавить array of string
в список элементов радиогруппы:
rgpOptions.Items.AddStrings(
TArray<String>.Create(
'Screws 12mm',
'Canned Peaches 250g',
'Refil Blue Pen',
'Tomatoes',
'Spaghetti',
'Twin Flex 5m',
'Clear glue 250ml'
)
);
Если вы загружаете и устанавливаете GExperts ( http://www.gexperts.org/download/ ). Вы получите новое меню и некоторое расширение контекстного меню.
Один из новых вариантов: <component to code>
[/g1]
Если вы выберете компонент контейнера (например, TPanel), он будет создавать код для всех принадлежащих ему компонентов.